Full Code of surparallel/luacluster for AI

main 3e210eefcfc3 cached
7025 files
78.9 MB
16.9M tokens
36796 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (67,738K chars total). Download the full file to get everything.
Repository: surparallel/luacluster
Branch: main
Commit: 3e210eefcfc3
Files: 7025
Total size: 78.9 MB

Directory structure:
gitextract_syo__2db/

├── .github/
│   └── workflows/
│       └── c-cpp.yml
├── .gitignore
├── LICENSE
├── README.md
├── core/
│   ├── CMakeLists.txt
│   ├── bin/
│   │   └── server/
│   │       ├── assert_sc.lua
│   │       ├── bots.bat
│   │       ├── bots.sh
│   │       ├── log4j.properties
│   │       ├── lua/
│   │       │   ├── LuaPanda.lua
│   │       │   ├── MemoryReferenceInfo.lua
│   │       │   ├── bigworld.lua
│   │       │   ├── bots.lua
│   │       │   ├── client.lua
│   │       │   ├── clientmoveplugin.lua
│   │       │   ├── cluster.lua
│   │       │   ├── dbentity.lua
│   │       │   ├── dbplugin.lua
│   │       │   ├── dbsvr.lua
│   │       │   ├── dcopy.lua
│   │       │   ├── dkjson.lua
│   │       │   ├── dockerrun.lua
│   │       │   ├── eloghelp.lua
│   │       │   ├── entity.lua
│   │       │   ├── entitymng.lua
│   │       │   ├── list.lua
│   │       │   ├── ltn12.lua
│   │       │   ├── mime.lua
│   │       │   ├── moveplugin.lua
│   │       │   ├── msgpack.lua
│   │       │   ├── npc.lua
│   │       │   ├── profiler.lua
│   │       │   ├── redis.lua
│   │       │   ├── redishelp.lua
│   │       │   ├── sc.lua
│   │       │   ├── socket/
│   │       │   │   ├── ftp.lua
│   │       │   │   ├── http.lua
│   │       │   │   ├── smtp.lua
│   │       │   │   ├── tp.lua
│   │       │   │   └── url.lua
│   │       │   ├── socket.lua
│   │       │   ├── space.lua
│   │       │   ├── spaceplugin.lua
│   │       │   ├── spaceproxy.lua
│   │       │   ├── strpath.lua
│   │       │   ├── sudoku.lua
│   │       │   ├── sudokuex.lua
│   │       │   ├── tabtostr.lua
│   │       │   ├── tcpproxy.lua
│   │       │   ├── test-allmongo.lua
│   │       │   ├── test-bson.lua
│   │       │   ├── test-gridfs.lua
│   │       │   ├── test-mongo.lua
│   │       │   ├── test_entity/
│   │       │   │   ├── myEntity.lua
│   │       │   │   ├── parant.lua
│   │       │   │   ├── parant2.lua
│   │       │   │   ├── parant3.lua
│   │       │   │   └── test_myEntity.lua
│   │       │   ├── test_list.lua
│   │       │   ├── test_lua.lua
│   │       │   ├── tools.lua
│   │       │   ├── try-catch-finally.lua
│   │       │   ├── ttry-catch.lua
│   │       │   ├── udpproxy.lua
│   │       │   └── udpproxylist.lua
│   │       ├── redis.bat
│   │       ├── redis.windows-service.conf
│   │       ├── redis.windows.conf
│   │       └── test.json
│   ├── res/
│   │   └── server/
│   │       └── config_defaults.json
│   └── src/
│       ├── lib/
│       │   ├── 3rd/
│       │   │   ├── 3dmath/
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── box.c
│       │   │   │   ├── box.h
│       │   │   │   ├── mathf.c
│       │   │   │   ├── mathf.h
│       │   │   │   ├── matrix4.c
│       │   │   │   ├── matrix4.h
│       │   │   │   ├── plane.c
│       │   │   │   ├── plane.h
│       │   │   │   ├── quaternion.c
│       │   │   │   ├── quaternion.h
│       │   │   │   ├── ray.c
│       │   │   │   ├── ray.h
│       │   │   │   ├── transform.c
│       │   │   │   ├── transform.h
│       │   │   │   ├── vector.c
│       │   │   │   ├── vector.h
│       │   │   │   ├── vector2.c
│       │   │   │   └── vector2.h
│       │   │   ├── hiredis/
│       │   │   │   ├── .github/
│       │   │   │   │   └── workflows/
│       │   │   │   │       └── build.yml
│       │   │   │   ├── .gitignore
│       │   │   │   ├── .travis.yml
│       │   │   │   ├── CHANGELOG.md
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── COPYING
│       │   │   │   ├── Makefile
│       │   │   │   ├── README.md
│       │   │   │   ├── adapters/
│       │   │   │   │   ├── ae.h
│       │   │   │   │   ├── glib.h
│       │   │   │   │   ├── ivykis.h
│       │   │   │   │   ├── libev.h
│       │   │   │   │   ├── libevent.h
│       │   │   │   │   ├── libuv.h
│       │   │   │   │   ├── macosx.h
│       │   │   │   │   └── qt.h
│       │   │   │   ├── alloc.c
│       │   │   │   ├── alloc.h
│       │   │   │   ├── appveyor.yml
│       │   │   │   ├── async.c
│       │   │   │   ├── async.h
│       │   │   │   ├── async_private.h
│       │   │   │   ├── dict.c
│       │   │   │   ├── dict.h
│       │   │   │   ├── examples/
│       │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   ├── example-ae.c
│       │   │   │   │   ├── example-glib.c
│       │   │   │   │   ├── example-ivykis.c
│       │   │   │   │   ├── example-libev.c
│       │   │   │   │   ├── example-libevent-ssl.c
│       │   │   │   │   ├── example-libevent.c
│       │   │   │   │   ├── example-libuv.c
│       │   │   │   │   ├── example-macosx.c
│       │   │   │   │   ├── example-push.c
│       │   │   │   │   ├── example-qt.cpp
│       │   │   │   │   ├── example-qt.h
│       │   │   │   │   ├── example-ssl.c
│       │   │   │   │   └── example.c
│       │   │   │   ├── fmacros.h
│       │   │   │   ├── fuzzing/
│       │   │   │   │   └── format_command_fuzzer.c
│       │   │   │   ├── hiredis-config.cmake.in
│       │   │   │   ├── hiredis.c
│       │   │   │   ├── hiredis.h
│       │   │   │   ├── hiredis.pc.in
│       │   │   │   ├── hiredis.targets
│       │   │   │   ├── hiredis_ssl-config.cmake.in
│       │   │   │   ├── hiredis_ssl.h
│       │   │   │   ├── hiredis_ssl.pc.in
│       │   │   │   ├── net.c
│       │   │   │   ├── net.h
│       │   │   │   ├── read.c
│       │   │   │   ├── read.h
│       │   │   │   ├── sds.c
│       │   │   │   ├── sds.h
│       │   │   │   ├── sdsalloc.h
│       │   │   │   ├── sockcompat.c
│       │   │   │   ├── sockcompat.h
│       │   │   │   ├── ssl.c
│       │   │   │   ├── test.c
│       │   │   │   ├── test.sh
│       │   │   │   └── win32.h
│       │   │   ├── libuv/
│       │   │   │   ├── .gitattributes
│       │   │   │   ├── .mailmap
│       │   │   │   ├── AUTHORS
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── CONTRIBUTING.md
│       │   │   │   ├── ChangeLog
│       │   │   │   ├── LICENSE
│       │   │   │   ├── LICENSE-docs
│       │   │   │   ├── MAINTAINERS.md
│       │   │   │   ├── Makefile.am
│       │   │   │   ├── README.md
│       │   │   │   ├── SUPPORTED_PLATFORMS.md
│       │   │   │   ├── autogen.sh
│       │   │   │   ├── configure.ac
│       │   │   │   ├── docs/
│       │   │   │   │   ├── Makefile
│       │   │   │   │   ├── code/
│       │   │   │   │   │   ├── cgi/
│       │   │   │   │   │   │   ├── main.c
│       │   │   │   │   │   │   └── tick.c
│       │   │   │   │   │   ├── detach/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── dns/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── helloworld/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── idle-basic/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── idle-compute/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── interfaces/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── locks/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── multi-echo-server/
│       │   │   │   │   │   │   ├── hammer.js
│       │   │   │   │   │   │   ├── main.c
│       │   │   │   │   │   │   └── worker.c
│       │   │   │   │   │   ├── onchange/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── pipe-echo-server/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── plugin/
│       │   │   │   │   │   │   ├── hello.c
│       │   │   │   │   │   │   ├── main.c
│       │   │   │   │   │   │   └── plugin.h
│       │   │   │   │   │   ├── proc-streams/
│       │   │   │   │   │   │   ├── main.c
│       │   │   │   │   │   │   └── test.c
│       │   │   │   │   │   ├── progress/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── queue-cancel/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── queue-work/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── ref-timer/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── signal/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── spawn/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── tcp-echo-server/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── thread-create/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── tty/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── tty-gravity/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── udp-dhcp/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── uvcat/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── uvstop/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── uvtee/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   └── uvwget/
│       │   │   │   │   │       └── main.c
│       │   │   │   │   ├── make.bat
│       │   │   │   │   └── src/
│       │   │   │   │       ├── api.rst
│       │   │   │   │       ├── async.rst
│       │   │   │   │       ├── check.rst
│       │   │   │   │       ├── conf.py
│       │   │   │   │       ├── design.rst
│       │   │   │   │       ├── dll.rst
│       │   │   │   │       ├── dns.rst
│       │   │   │   │       ├── errors.rst
│       │   │   │   │       ├── fs.rst
│       │   │   │   │       ├── fs_event.rst
│       │   │   │   │       ├── fs_poll.rst
│       │   │   │   │       ├── guide/
│       │   │   │   │       │   ├── about.rst
│       │   │   │   │       │   ├── basics.rst
│       │   │   │   │       │   ├── eventloops.rst
│       │   │   │   │       │   ├── filesystem.rst
│       │   │   │   │       │   ├── introduction.rst
│       │   │   │   │       │   ├── networking.rst
│       │   │   │   │       │   ├── processes.rst
│       │   │   │   │       │   ├── threads.rst
│       │   │   │   │       │   └── utilities.rst
│       │   │   │   │       ├── guide.rst
│       │   │   │   │       ├── handle.rst
│       │   │   │   │       ├── idle.rst
│       │   │   │   │       ├── index.rst
│       │   │   │   │       ├── loop.rst
│       │   │   │   │       ├── metrics.rst
│       │   │   │   │       ├── migration_010_100.rst
│       │   │   │   │       ├── misc.rst
│       │   │   │   │       ├── pipe.rst
│       │   │   │   │       ├── poll.rst
│       │   │   │   │       ├── prepare.rst
│       │   │   │   │       ├── process.rst
│       │   │   │   │       ├── request.rst
│       │   │   │   │       ├── signal.rst
│       │   │   │   │       ├── sphinx-plugins/
│       │   │   │   │       │   └── manpage.py
│       │   │   │   │       ├── static/
│       │   │   │   │       │   └── diagrams.key/
│       │   │   │   │       │       └── Metadata/
│       │   │   │   │       │           ├── BuildVersionHistory.plist
│       │   │   │   │       │           ├── DocumentIdentifier
│       │   │   │   │       │           └── Properties.plist
│       │   │   │   │       ├── stream.rst
│       │   │   │   │       ├── tcp.rst
│       │   │   │   │       ├── threading.rst
│       │   │   │   │       ├── threadpool.rst
│       │   │   │   │       ├── timer.rst
│       │   │   │   │       ├── tty.rst
│       │   │   │   │       ├── udp.rst
│       │   │   │   │       ├── upgrading.rst
│       │   │   │   │       └── version.rst
│       │   │   │   ├── include/
│       │   │   │   │   ├── uv/
│       │   │   │   │   │   ├── aix.h
│       │   │   │   │   │   ├── android-ifaddrs.h
│       │   │   │   │   │   ├── bsd.h
│       │   │   │   │   │   ├── darwin.h
│       │   │   │   │   │   ├── errno.h
│       │   │   │   │   │   ├── linux.h
│       │   │   │   │   │   ├── os390.h
│       │   │   │   │   │   ├── posix.h
│       │   │   │   │   │   ├── stdint-msvc2008.h
│       │   │   │   │   │   ├── sunos.h
│       │   │   │   │   │   ├── threadpool.h
│       │   │   │   │   │   ├── tree.h
│       │   │   │   │   │   ├── unix.h
│       │   │   │   │   │   ├── version.h
│       │   │   │   │   │   └── win.h
│       │   │   │   │   └── uv.h
│       │   │   │   ├── libuv-static.pc.in
│       │   │   │   ├── libuv.pc.in
│       │   │   │   ├── m4/
│       │   │   │   │   ├── .gitignore
│       │   │   │   │   ├── as_case.m4
│       │   │   │   │   ├── ax_pthread.m4
│       │   │   │   │   └── libuv-check-flags.m4
│       │   │   │   ├── src/
│       │   │   │   │   ├── fs-poll.c
│       │   │   │   │   ├── heap-inl.h
│       │   │   │   │   ├── idna.c
│       │   │   │   │   ├── idna.h
│       │   │   │   │   ├── inet.c
│       │   │   │   │   ├── queue.h
│       │   │   │   │   ├── random.c
│       │   │   │   │   ├── strscpy.c
│       │   │   │   │   ├── strscpy.h
│       │   │   │   │   ├── threadpool.c
│       │   │   │   │   ├── timer.c
│       │   │   │   │   ├── unix/
│       │   │   │   │   │   ├── aix-common.c
│       │   │   │   │   │   ├── aix.c
│       │   │   │   │   │   ├── android-ifaddrs.c
│       │   │   │   │   │   ├── async.c
│       │   │   │   │   │   ├── atomic-ops.h
│       │   │   │   │   │   ├── bsd-ifaddrs.c
│       │   │   │   │   │   ├── bsd-proctitle.c
│       │   │   │   │   │   ├── core.c
│       │   │   │   │   │   ├── cygwin.c
│       │   │   │   │   │   ├── darwin-proctitle.c
│       │   │   │   │   │   ├── darwin-stub.h
│       │   │   │   │   │   ├── darwin.c
│       │   │   │   │   │   ├── dl.c
│       │   │   │   │   │   ├── freebsd.c
│       │   │   │   │   │   ├── fs.c
│       │   │   │   │   │   ├── fsevents.c
│       │   │   │   │   │   ├── getaddrinfo.c
│       │   │   │   │   │   ├── getnameinfo.c
│       │   │   │   │   │   ├── haiku.c
│       │   │   │   │   │   ├── ibmi.c
│       │   │   │   │   │   ├── internal.h
│       │   │   │   │   │   ├── kqueue.c
│       │   │   │   │   │   ├── linux-core.c
│       │   │   │   │   │   ├── linux-inotify.c
│       │   │   │   │   │   ├── linux-syscalls.c
│       │   │   │   │   │   ├── linux-syscalls.h
│       │   │   │   │   │   ├── loop-watcher.c
│       │   │   │   │   │   ├── loop.c
│       │   │   │   │   │   ├── netbsd.c
│       │   │   │   │   │   ├── no-fsevents.c
│       │   │   │   │   │   ├── no-proctitle.c
│       │   │   │   │   │   ├── openbsd.c
│       │   │   │   │   │   ├── os390-syscalls.c
│       │   │   │   │   │   ├── os390-syscalls.h
│       │   │   │   │   │   ├── os390.c
│       │   │   │   │   │   ├── pipe.c
│       │   │   │   │   │   ├── poll.c
│       │   │   │   │   │   ├── posix-hrtime.c
│       │   │   │   │   │   ├── posix-poll.c
│       │   │   │   │   │   ├── process.c
│       │   │   │   │   │   ├── procfs-exepath.c
│       │   │   │   │   │   ├── proctitle.c
│       │   │   │   │   │   ├── pthread-fixes.c
│       │   │   │   │   │   ├── qnx.c
│       │   │   │   │   │   ├── random-devurandom.c
│       │   │   │   │   │   ├── random-getentropy.c
│       │   │   │   │   │   ├── random-getrandom.c
│       │   │   │   │   │   ├── random-sysctl-linux.c
│       │   │   │   │   │   ├── signal.c
│       │   │   │   │   │   ├── spinlock.h
│       │   │   │   │   │   ├── stream.c
│       │   │   │   │   │   ├── sunos.c
│       │   │   │   │   │   ├── sysinfo-loadavg.c
│       │   │   │   │   │   ├── sysinfo-memory.c
│       │   │   │   │   │   ├── tcp.c
│       │   │   │   │   │   ├── thread.c
│       │   │   │   │   │   ├── tty.c
│       │   │   │   │   │   └── udp.c
│       │   │   │   │   ├── uv-common.c
│       │   │   │   │   ├── uv-common.h
│       │   │   │   │   ├── uv-data-getter-setters.c
│       │   │   │   │   ├── version.c
│       │   │   │   │   └── win/
│       │   │   │   │       ├── async.c
│       │   │   │   │       ├── atomicops-inl.h
│       │   │   │   │       ├── core.c
│       │   │   │   │       ├── detect-wakeup.c
│       │   │   │   │       ├── dl.c
│       │   │   │   │       ├── error.c
│       │   │   │   │       ├── fs-event.c
│       │   │   │   │       ├── fs-fd-hash-inl.h
│       │   │   │   │       ├── fs.c
│       │   │   │   │       ├── getaddrinfo.c
│       │   │   │   │       ├── getnameinfo.c
│       │   │   │   │       ├── handle-inl.h
│       │   │   │   │       ├── handle.c
│       │   │   │   │       ├── internal.h
│       │   │   │   │       ├── loop-watcher.c
│       │   │   │   │       ├── pipe.c
│       │   │   │   │       ├── poll.c
│       │   │   │   │       ├── process-stdio.c
│       │   │   │   │       ├── process.c
│       │   │   │   │       ├── req-inl.h
│       │   │   │   │       ├── signal.c
│       │   │   │   │       ├── snprintf.c
│       │   │   │   │       ├── stream-inl.h
│       │   │   │   │       ├── stream.c
│       │   │   │   │       ├── tcp.c
│       │   │   │   │       ├── thread.c
│       │   │   │   │       ├── tty.c
│       │   │   │   │       ├── udp.c
│       │   │   │   │       ├── util.c
│       │   │   │   │       ├── winapi.c
│       │   │   │   │       ├── winapi.h
│       │   │   │   │       ├── winsock.c
│       │   │   │   │       └── winsock.h
│       │   │   │   ├── test/
│       │   │   │   │   ├── benchmark-async-pummel.c
│       │   │   │   │   ├── benchmark-async.c
│       │   │   │   │   ├── benchmark-fs-stat.c
│       │   │   │   │   ├── benchmark-getaddrinfo.c
│       │   │   │   │   ├── benchmark-list.h
│       │   │   │   │   ├── benchmark-loop-count.c
│       │   │   │   │   ├── benchmark-million-async.c
│       │   │   │   │   ├── benchmark-million-timers.c
│       │   │   │   │   ├── benchmark-multi-accept.c
│       │   │   │   │   ├── benchmark-ping-pongs.c
│       │   │   │   │   ├── benchmark-ping-udp.c
│       │   │   │   │   ├── benchmark-pound.c
│       │   │   │   │   ├── benchmark-pump.c
│       │   │   │   │   ├── benchmark-sizes.c
│       │   │   │   │   ├── benchmark-spawn.c
│       │   │   │   │   ├── benchmark-tcp-write-batch.c
│       │   │   │   │   ├── benchmark-thread.c
│       │   │   │   │   ├── benchmark-udp-pummel.c
│       │   │   │   │   ├── blackhole-server.c
│       │   │   │   │   ├── dns-server.c
│       │   │   │   │   ├── echo-server.c
│       │   │   │   │   ├── fixtures/
│       │   │   │   │   │   ├── empty_file
│       │   │   │   │   │   ├── load_error.node
│       │   │   │   │   │   └── lorem_ipsum.txt
│       │   │   │   │   ├── run-benchmarks.c
│       │   │   │   │   ├── run-tests.c
│       │   │   │   │   ├── runner-unix.c
│       │   │   │   │   ├── runner-unix.h
│       │   │   │   │   ├── runner-win.c
│       │   │   │   │   ├── runner-win.h
│       │   │   │   │   ├── runner.c
│       │   │   │   │   ├── runner.h
│       │   │   │   │   ├── task.h
│       │   │   │   │   ├── test-active.c
│       │   │   │   │   ├── test-async-null-cb.c
│       │   │   │   │   ├── test-async.c
│       │   │   │   │   ├── test-barrier.c
│       │   │   │   │   ├── test-callback-order.c
│       │   │   │   │   ├── test-callback-stack.c
│       │   │   │   │   ├── test-close-fd.c
│       │   │   │   │   ├── test-close-order.c
│       │   │   │   │   ├── test-condvar.c
│       │   │   │   │   ├── test-connect-unspecified.c
│       │   │   │   │   ├── test-connection-fail.c
│       │   │   │   │   ├── test-cwd-and-chdir.c
│       │   │   │   │   ├── test-default-loop-close.c
│       │   │   │   │   ├── test-delayed-accept.c
│       │   │   │   │   ├── test-dlerror.c
│       │   │   │   │   ├── test-eintr-handling.c
│       │   │   │   │   ├── test-embed.c
│       │   │   │   │   ├── test-emfile.c
│       │   │   │   │   ├── test-env-vars.c
│       │   │   │   │   ├── test-error.c
│       │   │   │   │   ├── test-fail-always.c
│       │   │   │   │   ├── test-fork.c
│       │   │   │   │   ├── test-fs-copyfile.c
│       │   │   │   │   ├── test-fs-event.c
│       │   │   │   │   ├── test-fs-fd-hash.c
│       │   │   │   │   ├── test-fs-open-flags.c
│       │   │   │   │   ├── test-fs-poll.c
│       │   │   │   │   ├── test-fs-readdir.c
│       │   │   │   │   ├── test-fs.c
│       │   │   │   │   ├── test-get-currentexe.c
│       │   │   │   │   ├── test-get-loadavg.c
│       │   │   │   │   ├── test-get-memory.c
│       │   │   │   │   ├── test-get-passwd.c
│       │   │   │   │   ├── test-getaddrinfo.c
│       │   │   │   │   ├── test-gethostname.c
│       │   │   │   │   ├── test-getnameinfo.c
│       │   │   │   │   ├── test-getsockname.c
│       │   │   │   │   ├── test-getters-setters.c
│       │   │   │   │   ├── test-gettimeofday.c
│       │   │   │   │   ├── test-handle-fileno.c
│       │   │   │   │   ├── test-homedir.c
│       │   │   │   │   ├── test-hrtime.c
│       │   │   │   │   ├── test-idle.c
│       │   │   │   │   ├── test-idna.c
│       │   │   │   │   ├── test-ip4-addr.c
│       │   │   │   │   ├── test-ip6-addr.c
│       │   │   │   │   ├── test-ipc-heavy-traffic-deadlock-bug.c
│       │   │   │   │   ├── test-ipc-send-recv.c
│       │   │   │   │   ├── test-ipc.c
│       │   │   │   │   ├── test-list.h
│       │   │   │   │   ├── test-loop-alive.c
│       │   │   │   │   ├── test-loop-close.c
│       │   │   │   │   ├── test-loop-configure.c
│       │   │   │   │   ├── test-loop-handles.c
│       │   │   │   │   ├── test-loop-stop.c
│       │   │   │   │   ├── test-loop-time.c
│       │   │   │   │   ├── test-metrics.c
│       │   │   │   │   ├── test-multiple-listen.c
│       │   │   │   │   ├── test-mutexes.c
│       │   │   │   │   ├── test-osx-select.c
│       │   │   │   │   ├── test-pass-always.c
│       │   │   │   │   ├── test-ping-pong.c
│       │   │   │   │   ├── test-pipe-bind-error.c
│       │   │   │   │   ├── test-pipe-close-stdout-read-stdin.c
│       │   │   │   │   ├── test-pipe-connect-error.c
│       │   │   │   │   ├── test-pipe-connect-multiple.c
│       │   │   │   │   ├── test-pipe-connect-prepare.c
│       │   │   │   │   ├── test-pipe-getsockname.c
│       │   │   │   │   ├── test-pipe-pending-instances.c
│       │   │   │   │   ├── test-pipe-sendmsg.c
│       │   │   │   │   ├── test-pipe-server-close.c
│       │   │   │   │   ├── test-pipe-set-fchmod.c
│       │   │   │   │   ├── test-pipe-set-non-blocking.c
│       │   │   │   │   ├── test-platform-output.c
│       │   │   │   │   ├── test-poll-close-doesnt-corrupt-stack.c
│       │   │   │   │   ├── test-poll-close.c
│       │   │   │   │   ├── test-poll-closesocket.c
│       │   │   │   │   ├── test-poll-multiple-handles.c
│       │   │   │   │   ├── test-poll-oob.c
│       │   │   │   │   ├── test-poll.c
│       │   │   │   │   ├── test-process-priority.c
│       │   │   │   │   ├── test-process-title-threadsafe.c
│       │   │   │   │   ├── test-process-title.c
│       │   │   │   │   ├── test-queue-foreach-delete.c
│       │   │   │   │   ├── test-random.c
│       │   │   │   │   ├── test-ref.c
│       │   │   │   │   ├── test-run-nowait.c
│       │   │   │   │   ├── test-run-once.c
│       │   │   │   │   ├── test-semaphore.c
│       │   │   │   │   ├── test-shutdown-close.c
│       │   │   │   │   ├── test-shutdown-eof.c
│       │   │   │   │   ├── test-shutdown-twice.c
│       │   │   │   │   ├── test-signal-multiple-loops.c
│       │   │   │   │   ├── test-signal-pending-on-close.c
│       │   │   │   │   ├── test-signal.c
│       │   │   │   │   ├── test-socket-buffer-size.c
│       │   │   │   │   ├── test-spawn.c
│       │   │   │   │   ├── test-stdio-over-pipes.c
│       │   │   │   │   ├── test-strscpy.c
│       │   │   │   │   ├── test-tcp-alloc-cb-fail.c
│       │   │   │   │   ├── test-tcp-bind-error.c
│       │   │   │   │   ├── test-tcp-bind6-error.c
│       │   │   │   │   ├── test-tcp-close-accept.c
│       │   │   │   │   ├── test-tcp-close-reset.c
│       │   │   │   │   ├── test-tcp-close-while-connecting.c
│       │   │   │   │   ├── test-tcp-close.c
│       │   │   │   │   ├── test-tcp-connect-error-after-write.c
│       │   │   │   │   ├── test-tcp-connect-error.c
│       │   │   │   │   ├── test-tcp-connect-timeout.c
│       │   │   │   │   ├── test-tcp-connect6-error.c
│       │   │   │   │   ├── test-tcp-create-socket-early.c
│       │   │   │   │   ├── test-tcp-flags.c
│       │   │   │   │   ├── test-tcp-oob.c
│       │   │   │   │   ├── test-tcp-open.c
│       │   │   │   │   ├── test-tcp-read-stop-start.c
│       │   │   │   │   ├── test-tcp-read-stop.c
│       │   │   │   │   ├── test-tcp-shutdown-after-write.c
│       │   │   │   │   ├── test-tcp-try-write-error.c
│       │   │   │   │   ├── test-tcp-try-write.c
│       │   │   │   │   ├── test-tcp-unexpected-read.c
│       │   │   │   │   ├── test-tcp-write-after-connect.c
│       │   │   │   │   ├── test-tcp-write-fail.c
│       │   │   │   │   ├── test-tcp-write-queue-order.c
│       │   │   │   │   ├── test-tcp-write-to-half-open-connection.c
│       │   │   │   │   ├── test-tcp-writealot.c
│       │   │   │   │   ├── test-test-macros.c
│       │   │   │   │   ├── test-thread-equal.c
│       │   │   │   │   ├── test-thread.c
│       │   │   │   │   ├── test-threadpool-cancel.c
│       │   │   │   │   ├── test-threadpool.c
│       │   │   │   │   ├── test-timer-again.c
│       │   │   │   │   ├── test-timer-from-check.c
│       │   │   │   │   ├── test-timer.c
│       │   │   │   │   ├── test-tmpdir.c
│       │   │   │   │   ├── test-tty-duplicate-key.c
│       │   │   │   │   ├── test-tty-escape-sequence-processing.c
│       │   │   │   │   ├── test-tty.c
│       │   │   │   │   ├── test-udp-alloc-cb-fail.c
│       │   │   │   │   ├── test-udp-bind.c
│       │   │   │   │   ├── test-udp-connect.c
│       │   │   │   │   ├── test-udp-create-socket-early.c
│       │   │   │   │   ├── test-udp-dgram-too-big.c
│       │   │   │   │   ├── test-udp-ipv6.c
│       │   │   │   │   ├── test-udp-mmsg.c
│       │   │   │   │   ├── test-udp-multicast-interface.c
│       │   │   │   │   ├── test-udp-multicast-interface6.c
│       │   │   │   │   ├── test-udp-multicast-join.c
│       │   │   │   │   ├── test-udp-multicast-join6.c
│       │   │   │   │   ├── test-udp-multicast-ttl.c
│       │   │   │   │   ├── test-udp-open.c
│       │   │   │   │   ├── test-udp-options.c
│       │   │   │   │   ├── test-udp-send-and-recv.c
│       │   │   │   │   ├── test-udp-send-hang-loop.c
│       │   │   │   │   ├── test-udp-send-immediate.c
│       │   │   │   │   ├── test-udp-send-unreachable.c
│       │   │   │   │   ├── test-udp-sendmmsg-error.c
│       │   │   │   │   ├── test-udp-try-send.c
│       │   │   │   │   ├── test-uname.c
│       │   │   │   │   ├── test-walk-handles.c
│       │   │   │   │   └── test-watcher-cross-stop.c
│       │   │   │   ├── tools/
│       │   │   │   │   └── make_dist_html.py
│       │   │   │   └── uv_win_longpath.manifest
│       │   │   ├── lua/
│       │   │   │   ├── COPYRIGHT
│       │   │   │   ├── HISTORY
│       │   │   │   ├── INSTALL
│       │   │   │   ├── Makefile
│       │   │   │   ├── README
│       │   │   │   └── src/
│       │   │   │       ├── CMakeLists.txt
│       │   │   │       ├── Makefile
│       │   │   │       ├── lapi.c
│       │   │   │       ├── lapi.h
│       │   │   │       ├── lauxlib.c
│       │   │   │       ├── lauxlib.h
│       │   │   │       ├── lbaselib.c
│       │   │   │       ├── lbitlib.c
│       │   │   │       ├── lcode.c
│       │   │   │       ├── lcode.h
│       │   │   │       ├── lcorolib.c
│       │   │   │       ├── lctype.c
│       │   │   │       ├── lctype.h
│       │   │   │       ├── ldblib.c
│       │   │   │       ├── ldebug.c
│       │   │   │       ├── ldebug.h
│       │   │   │       ├── ldo.c
│       │   │   │       ├── ldo.h
│       │   │   │       ├── ldump.c
│       │   │   │       ├── lfunc.c
│       │   │   │       ├── lfunc.h
│       │   │   │       ├── lgc.c
│       │   │   │       ├── lgc.h
│       │   │   │       ├── linit.c
│       │   │   │       ├── liolib.c
│       │   │   │       ├── llex.c
│       │   │   │       ├── llex.h
│       │   │   │       ├── llimits.h
│       │   │   │       ├── lmathlib.c
│       │   │   │       ├── lmem.c
│       │   │   │       ├── lmem.h
│       │   │   │       ├── loadlib.c
│       │   │   │       ├── lobject.c
│       │   │   │       ├── lobject.h
│       │   │   │       ├── lopcodes.c
│       │   │   │       ├── lopcodes.h
│       │   │   │       ├── loslib.c
│       │   │   │       ├── lparser.c
│       │   │   │       ├── lparser.h
│       │   │   │       ├── lstate.c
│       │   │   │       ├── lstate.h
│       │   │   │       ├── lstring.c
│       │   │   │       ├── lstring.h
│       │   │   │       ├── lstrlib.c
│       │   │   │       ├── ltable.c
│       │   │   │       ├── ltable.h
│       │   │   │       ├── ltablib.c
│       │   │   │       ├── ltm.c
│       │   │   │       ├── ltm.h
│       │   │   │       ├── lua.c
│       │   │   │       ├── lua.h
│       │   │   │       ├── lua.hpp
│       │   │   │       ├── luac.c
│       │   │   │       ├── luaconf.h
│       │   │   │       ├── lualib.h
│       │   │   │       ├── lundump.c
│       │   │   │       ├── lundump.h
│       │   │   │       ├── lvm.c
│       │   │   │       ├── lvm.h
│       │   │   │       ├── lzio.c
│       │   │   │       └── lzio.h
│       │   │   ├── lua-mongodb/
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── bson.c
│       │   │   │   ├── bsontype.c
│       │   │   │   ├── bulkoperation.c
│       │   │   │   ├── client.c
│       │   │   │   ├── collection.c
│       │   │   │   ├── common.h
│       │   │   │   ├── cursor.c
│       │   │   │   ├── database.c
│       │   │   │   ├── flags.c
│       │   │   │   ├── gridfs.c
│       │   │   │   ├── gridfsfile.c
│       │   │   │   ├── gridfsfilelist.c
│       │   │   │   ├── lua-mongodb.c
│       │   │   │   ├── lua-mongodb.h
│       │   │   │   ├── objectid.c
│       │   │   │   ├── readprefs.c
│       │   │   │   └── util.c
│       │   │   ├── luajit/
│       │   │   │   ├── .gitignore
│       │   │   │   ├── .travis.yml
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── COPYRIGHT
│       │   │   │   ├── Makefile
│       │   │   │   ├── README.md
│       │   │   │   ├── cmake/
│       │   │   │   │   ├── FindLua.cmake
│       │   │   │   │   ├── FindReadline.cmake
│       │   │   │   │   ├── dist.cmake
│       │   │   │   │   └── lua.cmake
│       │   │   │   ├── dist.info
│       │   │   │   ├── doc/
│       │   │   │   │   ├── bluequad-print.css
│       │   │   │   │   ├── bluequad.css
│       │   │   │   │   ├── changes.html
│       │   │   │   │   ├── contact.html
│       │   │   │   │   ├── ext_c_api.html
│       │   │   │   │   ├── ext_ffi.html
│       │   │   │   │   ├── ext_ffi_api.html
│       │   │   │   │   ├── ext_ffi_semantics.html
│       │   │   │   │   ├── ext_ffi_tutorial.html
│       │   │   │   │   ├── ext_jit.html
│       │   │   │   │   ├── ext_profiler.html
│       │   │   │   │   ├── extensions.html
│       │   │   │   │   ├── faq.html
│       │   │   │   │   ├── install.html
│       │   │   │   │   ├── luajit.html
│       │   │   │   │   ├── running.html
│       │   │   │   │   └── status.html
│       │   │   │   ├── dynasm/
│       │   │   │   │   ├── dasm_arm.h
│       │   │   │   │   ├── dasm_arm.lua
│       │   │   │   │   ├── dasm_arm64.h
│       │   │   │   │   ├── dasm_arm64.lua
│       │   │   │   │   ├── dasm_mips.h
│       │   │   │   │   ├── dasm_mips.lua
│       │   │   │   │   ├── dasm_mips64.lua
│       │   │   │   │   ├── dasm_ppc.h
│       │   │   │   │   ├── dasm_ppc.lua
│       │   │   │   │   ├── dasm_proto.h
│       │   │   │   │   ├── dasm_x64.lua
│       │   │   │   │   ├── dasm_x86.h
│       │   │   │   │   ├── dasm_x86.lua
│       │   │   │   │   └── dynasm.lua
│       │   │   │   └── etc/
│       │   │   │       ├── luajit.1
│       │   │   │       └── luajit.pc
│       │   │   ├── luasocket/
│       │   │   │   ├── .gitignore
│       │   │   │   ├── .travis.yml
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── FIX
│       │   │   │   ├── LICENSE
│       │   │   │   ├── Lua51.props
│       │   │   │   ├── Lua52.props
│       │   │   │   ├── NEW
│       │   │   │   ├── README
│       │   │   │   ├── TODO
│       │   │   │   ├── WISH
│       │   │   │   ├── cmake/
│       │   │   │   │   ├── FindLua.cmake
│       │   │   │   │   ├── dist.cmake
│       │   │   │   │   └── lua.cmake
│       │   │   │   ├── dist.info
│       │   │   │   ├── doc/
│       │   │   │   │   ├── dns.html
│       │   │   │   │   ├── ftp.html
│       │   │   │   │   ├── http.html
│       │   │   │   │   ├── index.html
│       │   │   │   │   ├── installation.html
│       │   │   │   │   ├── introduction.html
│       │   │   │   │   ├── ltn12.html
│       │   │   │   │   ├── lua05.ppt
│       │   │   │   │   ├── mime.html
│       │   │   │   │   ├── reference.css
│       │   │   │   │   ├── reference.html
│       │   │   │   │   ├── smtp.html
│       │   │   │   │   ├── socket.html
│       │   │   │   │   ├── tcp.html
│       │   │   │   │   ├── udp.html
│       │   │   │   │   └── url.html
│       │   │   │   ├── etc/
│       │   │   │   │   ├── README
│       │   │   │   │   ├── b64.lua
│       │   │   │   │   ├── check-links.lua
│       │   │   │   │   ├── check-memory.lua
│       │   │   │   │   ├── cookie.lua
│       │   │   │   │   ├── dict.lua
│       │   │   │   │   ├── dispatch.lua
│       │   │   │   │   ├── eol.lua
│       │   │   │   │   ├── forward.lua
│       │   │   │   │   ├── get.lua
│       │   │   │   │   ├── links
│       │   │   │   │   ├── lp.lua
│       │   │   │   │   ├── qp.lua
│       │   │   │   │   └── tftp.lua
│       │   │   │   ├── gem/
│       │   │   │   │   ├── ex1.lua
│       │   │   │   │   ├── ex10.lua
│       │   │   │   │   ├── ex11.lua
│       │   │   │   │   ├── ex12.lua
│       │   │   │   │   ├── ex2.lua
│       │   │   │   │   ├── ex3.lua
│       │   │   │   │   ├── ex4.lua
│       │   │   │   │   ├── ex5.lua
│       │   │   │   │   ├── ex6.lua
│       │   │   │   │   ├── ex7.lua
│       │   │   │   │   ├── ex8.lua
│       │   │   │   │   ├── ex9.lua
│       │   │   │   │   ├── gem.c
│       │   │   │   │   ├── gt.b64
│       │   │   │   │   ├── ltn012.tex
│       │   │   │   │   ├── makefile
│       │   │   │   │   ├── myps2pdf
│       │   │   │   │   ├── t1.lua
│       │   │   │   │   ├── t1lf.txt
│       │   │   │   │   ├── t2.lua
│       │   │   │   │   ├── t2.txt
│       │   │   │   │   ├── t2gt.qp
│       │   │   │   │   ├── t3.lua
│       │   │   │   │   ├── t4.lua
│       │   │   │   │   ├── t5.lua
│       │   │   │   │   └── test.lua
│       │   │   │   ├── logo.ps
│       │   │   │   ├── ltn012.wiki
│       │   │   │   ├── ltn013.wiki
│       │   │   │   ├── luasocket-scm-0.rockspec
│       │   │   │   ├── luasocket.sln
│       │   │   │   ├── makefile
│       │   │   │   ├── makefile.dist
│       │   │   │   ├── mime.vcxproj
│       │   │   │   ├── mime.vcxproj.filters
│       │   │   │   ├── samples/
│       │   │   │   │   ├── README
│       │   │   │   │   ├── cddb.lua
│       │   │   │   │   ├── daytimeclnt.lua
│       │   │   │   │   ├── echoclnt.lua
│       │   │   │   │   ├── echosrvr.lua
│       │   │   │   │   ├── listener.lua
│       │   │   │   │   ├── lpr.lua
│       │   │   │   │   ├── mclisten.lua
│       │   │   │   │   ├── mcsend.lua
│       │   │   │   │   ├── talker.lua
│       │   │   │   │   └── tinyirc.lua
│       │   │   │   ├── socket.vcxproj
│       │   │   │   ├── socket.vcxproj.filters
│       │   │   │   ├── src/
│       │   │   │   │   ├── auxiliar.c
│       │   │   │   │   ├── auxiliar.h
│       │   │   │   │   ├── buffer.c
│       │   │   │   │   ├── buffer.h
│       │   │   │   │   ├── except.c
│       │   │   │   │   ├── except.h
│       │   │   │   │   ├── ftp.lua
│       │   │   │   │   ├── headers.lua
│       │   │   │   │   ├── http.lua
│       │   │   │   │   ├── inet.c
│       │   │   │   │   ├── inet.h
│       │   │   │   │   ├── io.c
│       │   │   │   │   ├── io.h
│       │   │   │   │   ├── ltn12.lua
│       │   │   │   │   ├── luasocket.c
│       │   │   │   │   ├── luasocket.h
│       │   │   │   │   ├── makefile
│       │   │   │   │   ├── mbox.lua
│       │   │   │   │   ├── mime.c
│       │   │   │   │   ├── mime.h
│       │   │   │   │   ├── mime.lua
│       │   │   │   │   ├── options.c
│       │   │   │   │   ├── options.h
│       │   │   │   │   ├── select.c
│       │   │   │   │   ├── select.h
│       │   │   │   │   ├── serial.c
│       │   │   │   │   ├── smtp.lua
│       │   │   │   │   ├── socket.h
│       │   │   │   │   ├── socket.lua
│       │   │   │   │   ├── tcp.c
│       │   │   │   │   ├── tcp.h
│       │   │   │   │   ├── timeout.c
│       │   │   │   │   ├── timeout.h
│       │   │   │   │   ├── tp.lua
│       │   │   │   │   ├── udp.c
│       │   │   │   │   ├── udp.h
│       │   │   │   │   ├── unix.c
│       │   │   │   │   ├── unix.h
│       │   │   │   │   ├── url.lua
│       │   │   │   │   ├── usocket.c
│       │   │   │   │   ├── usocket.h
│       │   │   │   │   ├── wsocket.c
│       │   │   │   │   └── wsocket.h
│       │   │   │   └── test/
│       │   │   │       ├── README
│       │   │   │       ├── auth/
│       │   │   │       │   ├── .htpasswd
│       │   │   │       │   └── index.html
│       │   │   │       ├── cgi/
│       │   │   │       │   ├── cat
│       │   │   │       │   ├── cat-index-html
│       │   │   │       │   ├── env
│       │   │   │       │   ├── query-string
│       │   │   │       │   ├── redirect-loop
│       │   │   │       │   └── request-uri
│       │   │   │       ├── dicttest.lua
│       │   │   │       ├── excepttest.lua
│       │   │   │       ├── find-connect-limit
│       │   │   │       ├── ftptest.lua
│       │   │   │       ├── hello.lua
│       │   │   │       ├── httptest.lua
│       │   │   │       ├── index.html
│       │   │   │       ├── ltn12test.lua
│       │   │   │       ├── mimetest.lua
│       │   │   │       ├── smtptest.lua
│       │   │   │       ├── stufftest.lua
│       │   │   │       ├── tcp-getoptions
│       │   │   │       ├── test_bind.lua
│       │   │   │       ├── test_getaddrinfo.lua
│       │   │   │       ├── test_socket_error.lua
│       │   │   │       ├── testclnt.lua
│       │   │   │       ├── testmesg.lua
│       │   │   │       ├── testsrvr.lua
│       │   │   │       ├── testsupport.lua
│       │   │   │       ├── tftptest.lua
│       │   │   │       ├── udp-zero-length-send
│       │   │   │       ├── udp-zero-length-send-recv
│       │   │   │       ├── udpconnectclnt.lua
│       │   │   │       ├── udpconnectsrvr.lua
│       │   │   │       ├── unixclnt.lua
│       │   │   │       ├── unixsrvr.lua
│       │   │   │       ├── upload.html
│       │   │   │       ├── urltest.lua
│       │   │   │       ├── utestclnt.lua
│       │   │   │       └── utestsrvr.lua
│       │   │   ├── mongo-c-driver/
│       │   │   │   ├── .clang-format
│       │   │   │   ├── .evergreen/
│       │   │   │   │   ├── .codecov.yml
│       │   │   │   │   ├── abi-compliance-check.sh
│       │   │   │   │   ├── add-build-dirs-to-paths.sh
│       │   │   │   │   ├── benchmark.yml
│       │   │   │   │   ├── build_snapshot_rpm.sh
│       │   │   │   │   ├── check-files.py
│       │   │   │   │   ├── check-installed-files-bson.bat
│       │   │   │   │   ├── check-installed-files.bat
│       │   │   │   │   ├── check-preludes.py
│       │   │   │   │   ├── check-public-decls.sh
│       │   │   │   │   ├── check-release-archive.sh
│       │   │   │   │   ├── check-symlink.sh
│       │   │   │   │   ├── compile-unix.sh
│       │   │   │   │   ├── compile-windows-mingw.bat
│       │   │   │   │   ├── compile-windows.sh
│       │   │   │   │   ├── compile.sh
│       │   │   │   │   ├── config.yml
│       │   │   │   │   ├── debian_package_build.sh
│       │   │   │   │   ├── debug-core-evergreen.sh
│       │   │   │   │   ├── download-mongodb.sh
│       │   │   │   │   ├── find-cmake.sh
│       │   │   │   │   ├── install-ssl.sh
│       │   │   │   │   ├── install-uninstall-check.sh
│       │   │   │   │   ├── integration-tests.sh
│       │   │   │   │   ├── kerberos.realm
│       │   │   │   │   ├── link-sample-program-bson.sh
│       │   │   │   │   ├── link-sample-program.sh
│       │   │   │   │   ├── llvm-gcov.sh
│       │   │   │   │   ├── man-pages-to-html.sh
│       │   │   │   │   ├── run-auth-tests.sh
│       │   │   │   │   ├── run-mock-server-tests.sh
│       │   │   │   │   ├── run-tests-bson.sh
│       │   │   │   │   ├── run-tests-mingw-bson.bat
│       │   │   │   │   ├── run-tests-mingw.bat
│       │   │   │   │   ├── run-tests.sh
│       │   │   │   │   ├── spec.patch
│       │   │   │   │   └── valgrind.sh
│       │   │   │   ├── .gdbinit
│       │   │   │   ├── .gitattributes
│       │   │   │   ├── .gitmodules
│       │   │   │   ├── .lsan-suppressions
│       │   │   │   ├── .travis.scripts/
│       │   │   │   │   └── debug-core.sh
│       │   │   │   ├── .travis.yml
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── CONTRIBUTING.md
│       │   │   │   ├── COPYING
│       │   │   │   ├── NEWS
│       │   │   │   ├── README.rst
│       │   │   │   ├── THIRD_PARTY_NOTICES
│       │   │   │   ├── build/
│       │   │   │   │   ├── .gitignore
│       │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   ├── calc_release_version.py
│       │   │   │   │   ├── cmake/
│       │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   ├── CheckSchedGetCPU.cmake
│       │   │   │   │   │   ├── FindResSearch.cmake
│       │   │   │   │   │   ├── FindSASL2.cmake
│       │   │   │   │   │   ├── FindSnappy.cmake
│       │   │   │   │   │   ├── FindSphinx.cmake
│       │   │   │   │   │   ├── LoadVersion.cmake
│       │   │   │   │   │   ├── MaintainerFlags.cmake
│       │   │   │   │   │   ├── MongoCPackage.cmake
│       │   │   │   │   │   ├── ParseVersion.cmake
│       │   │   │   │   │   ├── SphinxBuild.cmake
│       │   │   │   │   │   └── make_dist/
│       │   │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │   │       ├── COPYING-CMAKE-SCRIPTS.txt
│       │   │   │   │   │       ├── MakeDist.cmake
│       │   │   │   │   │       ├── MakeDistCheck.cmake
│       │   │   │   │   │       └── MakeDistFiles.cmake
│       │   │   │   │   ├── evergreen_config_lib/
│       │   │   │   │   │   ├── __init__.py
│       │   │   │   │   │   ├── functions.py
│       │   │   │   │   │   ├── tasks.py
│       │   │   │   │   │   └── variants.py
│       │   │   │   │   ├── future_function_templates/
│       │   │   │   │   │   ├── future-functions.c.template
│       │   │   │   │   │   ├── future-functions.h.template
│       │   │   │   │   │   ├── future-value.c.template
│       │   │   │   │   │   ├── future-value.h.template
│       │   │   │   │   │   ├── future.c.template
│       │   │   │   │   │   └── future.h.template
│       │   │   │   │   ├── generate-evergreen-config.py
│       │   │   │   │   ├── generate-future-functions.py
│       │   │   │   │   ├── generate-opts.py
│       │   │   │   │   ├── generate-uninstall.sh
│       │   │   │   │   ├── maintainer-flags.txt
│       │   │   │   │   ├── opts_templates/
│       │   │   │   │   │   ├── mongoc-opts-private.h.template
│       │   │   │   │   │   └── mongoc-opts.c.template
│       │   │   │   │   ├── requirements.txt
│       │   │   │   │   └── sphinx/
│       │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │       ├── basic/
│       │   │   │   │       │   ├── changes/
│       │   │   │   │       │   │   ├── frameset.html
│       │   │   │   │       │   │   ├── rstsource.html
│       │   │   │   │       │   │   └── versionchanges.html
│       │   │   │   │       │   ├── defindex.html
│       │   │   │   │       │   ├── domainindex.html
│       │   │   │   │       │   ├── genindex-single.html
│       │   │   │   │       │   ├── genindex-split.html
│       │   │   │   │       │   ├── genindex.html
│       │   │   │   │       │   ├── globaltoc.html
│       │   │   │   │       │   ├── layout.html
│       │   │   │   │       │   ├── localtoc.html
│       │   │   │   │       │   ├── opensearch.xml
│       │   │   │   │       │   ├── page.html
│       │   │   │   │       │   ├── relations.html
│       │   │   │   │       │   ├── search.html
│       │   │   │   │       │   ├── searchbox.html
│       │   │   │   │       │   ├── searchresults.html
│       │   │   │   │       │   ├── sourcelink.html
│       │   │   │   │       │   ├── static/
│       │   │   │   │       │   │   ├── basic.css_t
│       │   │   │   │       │   │   ├── doctools.js_t
│       │   │   │   │       │   │   ├── documentation_options.js_t
│       │   │   │   │       │   │   ├── jquery-3.2.1.js
│       │   │   │   │       │   │   ├── jquery.js
│       │   │   │   │       │   │   ├── searchtools.js_t
│       │   │   │   │       │   │   ├── underscore-1.3.1.js
│       │   │   │   │       │   │   ├── underscore.js
│       │   │   │   │       │   │   └── websupport.js
│       │   │   │   │       │   └── theme.conf
│       │   │   │   │       ├── customindexlink.html
│       │   │   │   │       ├── homepage-config/
│       │   │   │   │       │   ├── .gitignore
│       │   │   │   │       │   ├── conf.py
│       │   │   │   │       │   ├── index.rst
│       │   │   │   │       │   ├── libbson-releases.rst
│       │   │   │   │       │   └── libmongoc-releases.rst
│       │   │   │   │       ├── mongoc/
│       │   │   │   │       │   └── __init__.py
│       │   │   │   │       ├── mongoc_common.py
│       │   │   │   │       ├── readable/
│       │   │   │   │       │   ├── CMakeLists.txt
│       │   │   │   │       │   ├── layout.html
│       │   │   │   │       │   ├── relations.html
│       │   │   │   │       │   ├── static/
│       │   │   │   │       │   │   ├── pygments.css
│       │   │   │   │       │   │   └── readable.css_t
│       │   │   │   │       │   └── theme.conf
│       │   │   │   │       └── taglist.py
│       │   │   │   ├── debian/
│       │   │   │   │   ├── README.source
│       │   │   │   │   ├── build_snapshot.sh
│       │   │   │   │   ├── changelog
│       │   │   │   │   ├── compat
│       │   │   │   │   ├── control
│       │   │   │   │   ├── copyright
│       │   │   │   │   ├── gbp.conf
│       │   │   │   │   ├── libbson-1.0-0.dirs
│       │   │   │   │   ├── libbson-1.0-0.install
│       │   │   │   │   ├── libbson-1.0-0.lintian-overrides
│       │   │   │   │   ├── libbson-dev.dirs
│       │   │   │   │   ├── libbson-dev.docs
│       │   │   │   │   ├── libbson-dev.install
│       │   │   │   │   ├── libbson-doc.dirs
│       │   │   │   │   ├── libbson-doc.doc-base
│       │   │   │   │   ├── libbson-doc.docs
│       │   │   │   │   ├── libbson-doc.lintian-overrides
│       │   │   │   │   ├── libbson-doc.manpages
│       │   │   │   │   ├── libbson-objects.inv
│       │   │   │   │   ├── libmongoc-1.0-0.docs
│       │   │   │   │   ├── libmongoc-1.0-0.install
│       │   │   │   │   ├── libmongoc-1.0-0.lintian-overrides
│       │   │   │   │   ├── libmongoc-dev.docs
│       │   │   │   │   ├── libmongoc-dev.install
│       │   │   │   │   ├── libmongoc-doc.dirs
│       │   │   │   │   ├── libmongoc-doc.doc-base
│       │   │   │   │   ├── libmongoc-doc.docs
│       │   │   │   │   ├── libmongoc-doc.lintian-overrides
│       │   │   │   │   ├── libmongoc-doc.manpages
│       │   │   │   │   ├── rules
│       │   │   │   │   ├── source/
│       │   │   │   │   │   ├── format
│       │   │   │   │   │   ├── include-binaries
│       │   │   │   │   │   └── options
│       │   │   │   │   └── watch
│       │   │   │   ├── generate_uninstall/
│       │   │   │   │   └── CMakeLists.txt
│       │   │   │   ├── include/
│       │   │   │   │   ├── libbson-1.0/
│       │   │   │   │   │   ├── bson/
│       │   │   │   │   │   │   ├── bcon.h
│       │   │   │   │   │   │   ├── bson-atomic.h
│       │   │   │   │   │   │   └── bson-clock.h
│       │   │   │   │   │   └── bson.h
│       │   │   │   │   └── libmongoc-1.0/
│       │   │   │   │       ├── mongoc/
│       │   │   │   │       │   ├── mongoc-apm.h
│       │   │   │   │       │   ├── mongoc-bulk-operation.h
│       │   │   │   │       │   ├── mongoc-change-stream.h
│       │   │   │   │       │   ├── mongoc-client-pool.h
│       │   │   │   │       │   ├── mongoc-client-session.h
│       │   │   │   │       │   ├── mongoc-client-side-encryption.h
│       │   │   │   │       │   ├── mongoc-client.h
│       │   │   │   │       │   ├── mongoc-collection.h
│       │   │   │   │       │   ├── mongoc-config.h
│       │   │   │   │       │   ├── mongoc-cursor.h
│       │   │   │   │       │   ├── mongoc-database.h
│       │   │   │   │       │   ├── mongoc-error.h
│       │   │   │   │       │   ├── mongoc-find-and-modify.h
│       │   │   │   │       │   ├── mongoc-flags.h
│       │   │   │   │       │   ├── mongoc-gridfs-bucket.h
│       │   │   │   │       │   ├── mongoc-gridfs-file-list.h
│       │   │   │   │       │   ├── mongoc-gridfs-file-page.h
│       │   │   │   │       │   ├── mongoc-gridfs-file.h
│       │   │   │   │       │   ├── mongoc-gridfs.h
│       │   │   │   │       │   ├── mongoc-handshake.h
│       │   │   │   │       │   ├── mongoc-host-list.h
│       │   │   │   │       │   ├── mongoc-index.h
│       │   │   │   │       │   ├── mongoc-init.h
│       │   │   │   │       │   ├── mongoc-iovec.h
│       │   │   │   │       │   ├── mongoc-log.h
│       │   │   │   │       │   ├── mongoc-macros.h
│       │   │   │   │       │   ├── mongoc-matcher.h
│       │   │   │   │       │   ├── mongoc-opcode.h
│       │   │   │   │       │   ├── mongoc-prelude.h
│       │   │   │   │       │   ├── mongoc-rand.h
│       │   │   │   │       │   ├── mongoc-read-concern.h
│       │   │   │   │       │   ├── mongoc-read-prefs.h
│       │   │   │   │       │   ├── mongoc-server-description.h
│       │   │   │   │       │   ├── mongoc-socket.h
│       │   │   │   │       │   ├── mongoc-ssl.h
│       │   │   │   │       │   ├── mongoc-stream-buffered.h
│       │   │   │   │       │   ├── mongoc-stream-file.h
│       │   │   │   │       │   ├── mongoc-stream-gridfs.h
│       │   │   │   │       │   ├── mongoc-stream-socket.h
│       │   │   │   │       │   ├── mongoc-stream-tls-libressl.h
│       │   │   │   │       │   ├── mongoc-stream-tls-openssl.h
│       │   │   │   │       │   ├── mongoc-stream-tls.h
│       │   │   │   │       │   ├── mongoc-stream.h
│       │   │   │   │       │   ├── mongoc-topology-description.h
│       │   │   │   │       │   ├── mongoc-uri.h
│       │   │   │   │       │   ├── mongoc-version-functions.h
│       │   │   │   │       │   ├── mongoc-version.h
│       │   │   │   │       │   ├── mongoc-write-concern.h
│       │   │   │   │       │   └── mongoc.h
│       │   │   │   │       └── mongoc.h
│       │   │   │   ├── lldb_bson.py
│       │   │   │   ├── orchestration_configs/
│       │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   ├── replica_sets/
│       │   │   │   │   │   ├── auth-ssl.json
│       │   │   │   │   │   ├── auth-thisDB-ssl.json
│       │   │   │   │   │   ├── auth.json
│       │   │   │   │   │   ├── basic-ssl.json
│       │   │   │   │   │   └── basic.json
│       │   │   │   │   ├── servers/
│       │   │   │   │   │   ├── auth-ssl.json
│       │   │   │   │   │   ├── auth.json
│       │   │   │   │   │   ├── basic-ipv4-only.json
│       │   │   │   │   │   ├── basic-ssl.json
│       │   │   │   │   │   ├── basic.json
│       │   │   │   │   │   ├── mmapv1.json
│       │   │   │   │   │   ├── snappy-zlib-zstd.json
│       │   │   │   │   │   ├── snappy.json
│       │   │   │   │   │   ├── wiredtiger.json
│       │   │   │   │   │   ├── zlib.json
│       │   │   │   │   │   └── zstd.json
│       │   │   │   │   └── sharded_clusters/
│       │   │   │   │       ├── auth-ssl.json
│       │   │   │   │       ├── auth.json
│       │   │   │   │       ├── basic-ssl.json
│       │   │   │   │       └── basic.json
│       │   │   │   ├── src/
│       │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   ├── common/
│       │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   ├── common-b64-private.h
│       │   │   │   │   │   ├── common-b64.c
│       │   │   │   │   │   ├── common-md5-private.h
│       │   │   │   │   │   ├── common-md5.c
│       │   │   │   │   │   ├── common-prelude.h
│       │   │   │   │   │   └── common-thread-private.h
│       │   │   │   │   ├── libbson/
│       │   │   │   │   │   ├── .gitattributes
│       │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   ├── NEWS
│       │   │   │   │   │   ├── THIRD_PARTY_NOTICES
│       │   │   │   │   │   ├── build/
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── cmake/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── BSONPackage.cmake
│       │   │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   │   ├── CheckAtomics.cmake
│       │   │   │   │   │   │   │   ├── libbson-1.0-config-version.cmake.in
│       │   │   │   │   │   │   │   ├── libbson-1.0-config.cmake.in
│       │   │   │   │   │   │   │   ├── libbson-static-1.0-config-version.cmake.in
│       │   │   │   │   │   │   │   └── libbson-static-1.0-config.cmake.in
│       │   │   │   │   │   │   └── maintainer-flags.txt
│       │   │   │   │   │   ├── doc/
│       │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── api.rst
│       │   │   │   │   │   │   ├── bson_append_array.rst
│       │   │   │   │   │   │   ├── bson_append_array_begin.rst
│       │   │   │   │   │   │   ├── bson_append_array_end.rst
│       │   │   │   │   │   │   ├── bson_append_binary.rst
│       │   │   │   │   │   │   ├── bson_append_bool.rst
│       │   │   │   │   │   │   ├── bson_append_code.rst
│       │   │   │   │   │   │   ├── bson_append_code_with_scope.rst
│       │   │   │   │   │   │   ├── bson_append_date_time.rst
│       │   │   │   │   │   │   ├── bson_append_dbpointer.rst
│       │   │   │   │   │   │   ├── bson_append_decimal128.rst
│       │   │   │   │   │   │   ├── bson_append_document.rst
│       │   │   │   │   │   │   ├── bson_append_document_begin.rst
│       │   │   │   │   │   │   ├── bson_append_document_end.rst
│       │   │   │   │   │   │   ├── bson_append_double.rst
│       │   │   │   │   │   │   ├── bson_append_int32.rst
│       │   │   │   │   │   │   ├── bson_append_int64.rst
│       │   │   │   │   │   │   ├── bson_append_iter.rst
│       │   │   │   │   │   │   ├── bson_append_maxkey.rst
│       │   │   │   │   │   │   ├── bson_append_minkey.rst
│       │   │   │   │   │   │   ├── bson_append_now_utc.rst
│       │   │   │   │   │   │   ├── bson_append_null.rst
│       │   │   │   │   │   │   ├── bson_append_oid.rst
│       │   │   │   │   │   │   ├── bson_append_regex.rst
│       │   │   │   │   │   │   ├── bson_append_regex_w_len.rst
│       │   │   │   │   │   │   ├── bson_append_symbol.rst
│       │   │   │   │   │   │   ├── bson_append_time_t.rst
│       │   │   │   │   │   │   ├── bson_append_timestamp.rst
│       │   │   │   │   │   │   ├── bson_append_timeval.rst
│       │   │   │   │   │   │   ├── bson_append_undefined.rst
│       │   │   │   │   │   │   ├── bson_append_utf8.rst
│       │   │   │   │   │   │   ├── bson_append_value.rst
│       │   │   │   │   │   │   ├── bson_array_as_json.rst
│       │   │   │   │   │   │   ├── bson_as_canonical_extended_json.rst
│       │   │   │   │   │   │   ├── bson_as_json.rst
│       │   │   │   │   │   │   ├── bson_as_relaxed_extended_json.rst
│       │   │   │   │   │   │   ├── bson_ascii_strtoll.rst
│       │   │   │   │   │   │   ├── bson_check_version.rst
│       │   │   │   │   │   │   ├── bson_compare.rst
│       │   │   │   │   │   │   ├── bson_concat.rst
│       │   │   │   │   │   │   ├── bson_context_destroy.rst
│       │   │   │   │   │   │   ├── bson_context_get_default.rst
│       │   │   │   │   │   │   ├── bson_context_new.rst
│       │   │   │   │   │   │   ├── bson_context_t.rst
│       │   │   │   │   │   │   ├── bson_copy.rst
│       │   │   │   │   │   │   ├── bson_copy_to.rst
│       │   │   │   │   │   │   ├── bson_copy_to_excluding.rst
│       │   │   │   │   │   │   ├── bson_copy_to_excluding_noinit.rst
│       │   │   │   │   │   │   ├── bson_copy_to_excluding_noinit_va.rst
│       │   │   │   │   │   │   ├── bson_count_keys.rst
│       │   │   │   │   │   │   ├── bson_decimal128_from_string.rst
│       │   │   │   │   │   │   ├── bson_decimal128_from_string_w_len.rst
│       │   │   │   │   │   │   ├── bson_decimal128_t.rst
│       │   │   │   │   │   │   ├── bson_decimal128_to_string.rst
│       │   │   │   │   │   │   ├── bson_destroy.rst
│       │   │   │   │   │   │   ├── bson_destroy_with_steal.rst
│       │   │   │   │   │   │   ├── bson_equal.rst
│       │   │   │   │   │   │   ├── bson_error_t.rst
│       │   │   │   │   │   │   ├── bson_free.rst
│       │   │   │   │   │   │   ├── bson_get_data.rst
│       │   │   │   │   │   │   ├── bson_get_major_version.rst
│       │   │   │   │   │   │   ├── bson_get_micro_version.rst
│       │   │   │   │   │   │   ├── bson_get_minor_version.rst
│       │   │   │   │   │   │   ├── bson_get_monotonic_time.rst
│       │   │   │   │   │   │   ├── bson_get_version.rst
│       │   │   │   │   │   │   ├── bson_has_field.rst
│       │   │   │   │   │   │   ├── bson_init.rst
│       │   │   │   │   │   │   ├── bson_init_from_json.rst
│       │   │   │   │   │   │   ├── bson_init_static.rst
│       │   │   │   │   │   │   ├── bson_isspace.rst
│       │   │   │   │   │   │   ├── bson_iter_array.rst
│       │   │   │   │   │   │   ├── bson_iter_as_bool.rst
│       │   │   │   │   │   │   ├── bson_iter_as_double.rst
│       │   │   │   │   │   │   ├── bson_iter_as_int64.rst
│       │   │   │   │   │   │   ├── bson_iter_binary.rst
│       │   │   │   │   │   │   ├── bson_iter_bool.rst
│       │   │   │   │   │   │   ├── bson_iter_code.rst
│       │   │   │   │   │   │   ├── bson_iter_codewscope.rst
│       │   │   │   │   │   │   ├── bson_iter_date_time.rst
│       │   │   │   │   │   │   ├── bson_iter_dbpointer.rst
│       │   │   │   │   │   │   ├── bson_iter_decimal128.rst
│       │   │   │   │   │   │   ├── bson_iter_document.rst
│       │   │   │   │   │   │   ├── bson_iter_double.rst
│       │   │   │   │   │   │   ├── bson_iter_dup_utf8.rst
│       │   │   │   │   │   │   ├── bson_iter_find.rst
│       │   │   │   │   │   │   ├── bson_iter_find_case.rst
│       │   │   │   │   │   │   ├── bson_iter_find_descendant.rst
│       │   │   │   │   │   │   ├── bson_iter_find_w_len.rst
│       │   │   │   │   │   │   ├── bson_iter_init.rst
│       │   │   │   │   │   │   ├── bson_iter_init_find.rst
│       │   │   │   │   │   │   ├── bson_iter_init_find_case.rst
│       │   │   │   │   │   │   ├── bson_iter_init_find_w_len.rst
│       │   │   │   │   │   │   ├── bson_iter_init_from_data.rst
│       │   │   │   │   │   │   ├── bson_iter_init_from_data_at_offset.rst
│       │   │   │   │   │   │   ├── bson_iter_int32.rst
│       │   │   │   │   │   │   ├── bson_iter_int64.rst
│       │   │   │   │   │   │   ├── bson_iter_key.rst
│       │   │   │   │   │   │   ├── bson_iter_key_len.rst
│       │   │   │   │   │   │   ├── bson_iter_next.rst
│       │   │   │   │   │   │   ├── bson_iter_offset.rst
│       │   │   │   │   │   │   ├── bson_iter_oid.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_bool.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_date_time.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_decimal128.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_double.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_int32.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_int64.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_oid.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_timestamp.rst
│       │   │   │   │   │   │   ├── bson_iter_recurse.rst
│       │   │   │   │   │   │   ├── bson_iter_regex.rst
│       │   │   │   │   │   │   ├── bson_iter_symbol.rst
│       │   │   │   │   │   │   ├── bson_iter_t.rst
│       │   │   │   │   │   │   ├── bson_iter_time_t.rst
│       │   │   │   │   │   │   ├── bson_iter_timestamp.rst
│       │   │   │   │   │   │   ├── bson_iter_timeval.rst
│       │   │   │   │   │   │   ├── bson_iter_type.rst
│       │   │   │   │   │   │   ├── bson_iter_utf8.rst
│       │   │   │   │   │   │   ├── bson_iter_value.rst
│       │   │   │   │   │   │   ├── bson_iter_visit_all.rst
│       │   │   │   │   │   │   ├── bson_json_data_reader_ingest.rst
│       │   │   │   │   │   │   ├── bson_json_data_reader_new.rst
│       │   │   │   │   │   │   ├── bson_json_reader_destroy.rst
│       │   │   │   │   │   │   ├── bson_json_reader_new.rst
│       │   │   │   │   │   │   ├── bson_json_reader_new_from_fd.rst
│       │   │   │   │   │   │   ├── bson_json_reader_new_from_file.rst
│       │   │   │   │   │   │   ├── bson_json_reader_read.rst
│       │   │   │   │   │   │   ├── bson_json_reader_t.rst
│       │   │   │   │   │   │   ├── bson_malloc.rst
│       │   │   │   │   │   │   ├── bson_malloc0.rst
│       │   │   │   │   │   │   ├── bson_md5_append.rst
│       │   │   │   │   │   │   ├── bson_md5_finish.rst
│       │   │   │   │   │   │   ├── bson_md5_init.rst
│       │   │   │   │   │   │   ├── bson_md5_t.rst
│       │   │   │   │   │   │   ├── bson_mem_restore_vtable.rst
│       │   │   │   │   │   │   ├── bson_mem_set_vtable.rst
│       │   │   │   │   │   │   ├── bson_memory.rst
│       │   │   │   │   │   │   ├── bson_new.rst
│       │   │   │   │   │   │   ├── bson_new_from_buffer.rst
│       │   │   │   │   │   │   ├── bson_new_from_data.rst
│       │   │   │   │   │   │   ├── bson_new_from_json.rst
│       │   │   │   │   │   │   ├── bson_oid_compare.rst
│       │   │   │   │   │   │   ├── bson_oid_copy.rst
│       │   │   │   │   │   │   ├── bson_oid_equal.rst
│       │   │   │   │   │   │   ├── bson_oid_get_time_t.rst
│       │   │   │   │   │   │   ├── bson_oid_hash.rst
│       │   │   │   │   │   │   ├── bson_oid_init.rst
│       │   │   │   │   │   │   ├── bson_oid_init_from_data.rst
│       │   │   │   │   │   │   ├── bson_oid_init_from_string.rst
│       │   │   │   │   │   │   ├── bson_oid_init_sequence.rst
│       │   │   │   │   │   │   ├── bson_oid_is_valid.rst
│       │   │   │   │   │   │   ├── bson_oid_t.rst
│       │   │   │   │   │   │   ├── bson_oid_to_string.rst
│       │   │   │   │   │   │   ├── bson_reader_destroy.rst
│       │   │   │   │   │   │   ├── bson_reader_destroy_func_t.rst
│       │   │   │   │   │   │   ├── bson_reader_new_from_data.rst
│       │   │   │   │   │   │   ├── bson_reader_new_from_fd.rst
│       │   │   │   │   │   │   ├── bson_reader_new_from_file.rst
│       │   │   │   │   │   │   ├── bson_reader_new_from_handle.rst
│       │   │   │   │   │   │   ├── bson_reader_read.rst
│       │   │   │   │   │   │   ├── bson_reader_read_func_t.rst
│       │   │   │   │   │   │   ├── bson_reader_reset.rst
│       │   │   │   │   │   │   ├── bson_reader_set_destroy_func.rst
│       │   │   │   │   │   │   ├── bson_reader_set_read_func.rst
│       │   │   │   │   │   │   ├── bson_reader_t.rst
│       │   │   │   │   │   │   ├── bson_reader_tell.rst
│       │   │   │   │   │   │   ├── bson_realloc.rst
│       │   │   │   │   │   │   ├── bson_realloc_ctx.rst
│       │   │   │   │   │   │   ├── bson_realloc_func.rst
│       │   │   │   │   │   │   ├── bson_reinit.rst
│       │   │   │   │   │   │   ├── bson_reserve_buffer.rst
│       │   │   │   │   │   │   ├── bson_set_error.rst
│       │   │   │   │   │   │   ├── bson_sized_new.rst
│       │   │   │   │   │   │   ├── bson_snprintf.rst
│       │   │   │   │   │   │   ├── bson_steal.rst
│       │   │   │   │   │   │   ├── bson_strcasecmp.rst
│       │   │   │   │   │   │   ├── bson_strdup.rst
│       │   │   │   │   │   │   ├── bson_strdup_printf.rst
│       │   │   │   │   │   │   ├── bson_strdupv_printf.rst
│       │   │   │   │   │   │   ├── bson_strerror_r.rst
│       │   │   │   │   │   │   ├── bson_strfreev.rst
│       │   │   │   │   │   │   ├── bson_string_append.rst
│       │   │   │   │   │   │   ├── bson_string_append_c.rst
│       │   │   │   │   │   │   ├── bson_string_append_printf.rst
│       │   │   │   │   │   │   ├── bson_string_append_unichar.rst
│       │   │   │   │   │   │   ├── bson_string_free.rst
│       │   │   │   │   │   │   ├── bson_string_new.rst
│       │   │   │   │   │   │   ├── bson_string_t.rst
│       │   │   │   │   │   │   ├── bson_string_truncate.rst
│       │   │   │   │   │   │   ├── bson_strncpy.rst
│       │   │   │   │   │   │   ├── bson_strndup.rst
│       │   │   │   │   │   │   ├── bson_strnlen.rst
│       │   │   │   │   │   │   ├── bson_subtype_t.rst
│       │   │   │   │   │   │   ├── bson_t.rst
│       │   │   │   │   │   │   ├── bson_type_t.rst
│       │   │   │   │   │   │   ├── bson_uint32_to_string.rst
│       │   │   │   │   │   │   ├── bson_unichar_t.rst
│       │   │   │   │   │   │   ├── bson_utf8_escape_for_json.rst
│       │   │   │   │   │   │   ├── bson_utf8_from_unichar.rst
│       │   │   │   │   │   │   ├── bson_utf8_get_char.rst
│       │   │   │   │   │   │   ├── bson_utf8_next_char.rst
│       │   │   │   │   │   │   ├── bson_utf8_validate.rst
│       │   │   │   │   │   │   ├── bson_validate.rst
│       │   │   │   │   │   │   ├── bson_validate_with_error.rst
│       │   │   │   │   │   │   ├── bson_value_copy.rst
│       │   │   │   │   │   │   ├── bson_value_destroy.rst
│       │   │   │   │   │   │   ├── bson_value_t.rst
│       │   │   │   │   │   │   ├── bson_visitor_t.rst
│       │   │   │   │   │   │   ├── bson_vsnprintf.rst
│       │   │   │   │   │   │   ├── bson_writer_begin.rst
│       │   │   │   │   │   │   ├── bson_writer_destroy.rst
│       │   │   │   │   │   │   ├── bson_writer_end.rst
│       │   │   │   │   │   │   ├── bson_writer_get_length.rst
│       │   │   │   │   │   │   ├── bson_writer_new.rst
│       │   │   │   │   │   │   ├── bson_writer_rollback.rst
│       │   │   │   │   │   │   ├── bson_writer_t.rst
│       │   │   │   │   │   │   ├── bson_zero_free.rst
│       │   │   │   │   │   │   ├── character_and_string_routines.rst
│       │   │   │   │   │   │   ├── conf.py
│       │   │   │   │   │   │   ├── creating.rst
│       │   │   │   │   │   │   ├── cross-platform-notes.rst
│       │   │   │   │   │   │   ├── endianness.rst
│       │   │   │   │   │   │   ├── errors.rst
│       │   │   │   │   │   │   ├── full_index.rst
│       │   │   │   │   │   │   ├── guides.rst
│       │   │   │   │   │   │   ├── html/
│       │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   ├── include-and-link.rst
│       │   │   │   │   │   │   ├── index.rst
│       │   │   │   │   │   │   ├── json.rst
│       │   │   │   │   │   │   ├── man/
│       │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   ├── oid.rst
│       │   │   │   │   │   │   ├── parsing.rst
│       │   │   │   │   │   │   ├── streaming-bson.rst
│       │   │   │   │   │   │   ├── taglist.py
│       │   │   │   │   │   │   ├── threading.rst
│       │   │   │   │   │   │   ├── tutorial.rst
│       │   │   │   │   │   │   ├── utf8.rst
│       │   │   │   │   │   │   ├── valgrind.rst
│       │   │   │   │   │   │   └── version.rst
│       │   │   │   │   │   ├── examples/
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── bcon-col-view.c
│       │   │   │   │   │   │   ├── bcon-speed.c
│       │   │   │   │   │   │   ├── bson-check-depth.c
│       │   │   │   │   │   │   ├── bson-metrics.c
│       │   │   │   │   │   │   ├── bson-streaming-reader.c
│       │   │   │   │   │   │   ├── bson-to-json.c
│       │   │   │   │   │   │   ├── bson-validate.c
│       │   │   │   │   │   │   ├── cmake/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── find_package/
│       │   │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   │   └── find_package_static/
│       │   │   │   │   │   │   │       └── CMakeLists.txt
│       │   │   │   │   │   │   ├── cmake-deprecated/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── find_package/
│       │   │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   │   └── find_package_static/
│       │   │   │   │   │   │   │       └── CMakeLists.txt
│       │   │   │   │   │   │   ├── compile-with-pkg-config-static.sh
│       │   │   │   │   │   │   ├── compile-with-pkg-config.sh
│       │   │   │   │   │   │   ├── hello_bson.c
│       │   │   │   │   │   │   ├── json-to-bson.c
│       │   │   │   │   │   │   ├── manual_build_against_deprecated_lib_prefix/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── hello_bson.sln
│       │   │   │   │   │   │   │   ├── hello_bson.vcxproj
│       │   │   │   │   │   │   │   └── hello_bson.vcxproj.filters
│       │   │   │   │   │   │   └── manual_build_against_deprecated_lib_prefix_static/
│       │   │   │   │   │   │       ├── .gitignore
│       │   │   │   │   │   │       ├── hello_bson.sln
│       │   │   │   │   │   │       ├── hello_bson.vcxproj
│       │   │   │   │   │   │       └── hello_bson.vcxproj.filters
│       │   │   │   │   │   ├── src/
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── bson/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   │   ├── bcon.c
│       │   │   │   │   │   │   │   ├── bcon.h
│       │   │   │   │   │   │   │   ├── bson-atomic.c
│       │   │   │   │   │   │   │   ├── bson-atomic.h
│       │   │   │   │   │   │   │   ├── bson-clock.c
│       │   │   │   │   │   │   │   ├── bson-clock.h
│       │   │   │   │   │   │   │   ├── bson-compat.h
│       │   │   │   │   │   │   │   ├── bson-config.h.in
│       │   │   │   │   │   │   │   ├── bson-context-private.h
│       │   │   │   │   │   │   │   ├── bson-context.c
│       │   │   │   │   │   │   │   ├── bson-context.h
│       │   │   │   │   │   │   │   ├── bson-decimal128.c
│       │   │   │   │   │   │   │   ├── bson-decimal128.h
│       │   │   │   │   │   │   │   ├── bson-endian.h
│       │   │   │   │   │   │   │   ├── bson-error.c
│       │   │   │   │   │   │   │   ├── bson-error.h
│       │   │   │   │   │   │   │   ├── bson-iso8601-private.h
│       │   │   │   │   │   │   │   ├── bson-iso8601.c
│       │   │   │   │   │   │   │   ├── bson-iter.c
│       │   │   │   │   │   │   │   ├── bson-iter.h
│       │   │   │   │   │   │   │   ├── bson-json.c
│       │   │   │   │   │   │   │   ├── bson-json.h
│       │   │   │   │   │   │   │   ├── bson-keys.c
│       │   │   │   │   │   │   │   ├── bson-keys.h
│       │   │   │   │   │   │   │   ├── bson-macros.h
│       │   │   │   │   │   │   │   ├── bson-md5.c
│       │   │   │   │   │   │   │   ├── bson-md5.h
│       │   │   │   │   │   │   │   ├── bson-memory.c
│       │   │   │   │   │   │   │   ├── bson-memory.h
│       │   │   │   │   │   │   │   ├── bson-oid.c
│       │   │   │   │   │   │   │   ├── bson-oid.h
│       │   │   │   │   │   │   │   ├── bson-prelude.h
│       │   │   │   │   │   │   │   ├── bson-private.h
│       │   │   │   │   │   │   │   ├── bson-reader.c
│       │   │   │   │   │   │   │   ├── bson-reader.h
│       │   │   │   │   │   │   │   ├── bson-string.c
│       │   │   │   │   │   │   │   ├── bson-string.h
│       │   │   │   │   │   │   │   ├── bson-timegm-private.h
│       │   │   │   │   │   │   │   ├── bson-timegm.c
│       │   │   │   │   │   │   │   ├── bson-types.h
│       │   │   │   │   │   │   │   ├── bson-utf8.c
│       │   │   │   │   │   │   │   ├── bson-utf8.h
│       │   │   │   │   │   │   │   ├── bson-value.c
│       │   │   │   │   │   │   │   ├── bson-value.h
│       │   │   │   │   │   │   │   ├── bson-version-functions.c
│       │   │   │   │   │   │   │   ├── bson-version-functions.h
│       │   │   │   │   │   │   │   ├── bson-version.h.in
│       │   │   │   │   │   │   │   ├── bson-writer.c
│       │   │   │   │   │   │   │   ├── bson-writer.h
│       │   │   │   │   │   │   │   ├── bson.c
│       │   │   │   │   │   │   │   ├── bson.h
│       │   │   │   │   │   │   │   └── forwarding/
│       │   │   │   │   │   │   │       └── bson.h
│       │   │   │   │   │   │   ├── bson-config.cmake
│       │   │   │   │   │   │   ├── jsonsl/
│       │   │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   │   ├── LICENSE
│       │   │   │   │   │   │   │   ├── jsonsl.c
│       │   │   │   │   │   │   │   └── jsonsl.h
│       │   │   │   │   │   │   ├── libbson-1.0.pc.in
│       │   │   │   │   │   │   └── libbson-static-1.0.pc.in
│       │   │   │   │   │   └── tests/
│       │   │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │   │       ├── binary/
│       │   │   │   │   │       │   ├── binary_deprecated.bson
│       │   │   │   │   │       │   ├── cdriver2269.bson
│       │   │   │   │   │       │   ├── code_w_empty_scope.bson
│       │   │   │   │   │       │   ├── codewscope.bson
│       │   │   │   │   │       │   ├── dollarquery.bson
│       │   │   │   │   │       │   ├── dotkey.bson
│       │   │   │   │   │       │   ├── dotquery.bson
│       │   │   │   │   │       │   ├── empty_key.bson
│       │   │   │   │   │       │   ├── eurokey.bson
│       │   │   │   │   │       │   ├── overflow1.bson
│       │   │   │   │   │       │   ├── overflow2.bson
│       │   │   │   │   │       │   ├── overflow3.bson
│       │   │   │   │   │       │   ├── overflow4.bson
│       │   │   │   │   │       │   ├── readergrow.bson
│       │   │   │   │   │       │   ├── stackoverflow.bson
│       │   │   │   │   │       │   ├── stream.bson
│       │   │   │   │   │       │   ├── stream_corrupt.bson
│       │   │   │   │   │       │   ├── test1.bson
│       │   │   │   │   │       │   ├── test10.bson
│       │   │   │   │   │       │   ├── test11.bson
│       │   │   │   │   │       │   ├── test12.bson
│       │   │   │   │   │       │   ├── test13.bson
│       │   │   │   │   │       │   ├── test14.bson
│       │   │   │   │   │       │   ├── test15.bson
│       │   │   │   │   │       │   ├── test16.bson
│       │   │   │   │   │       │   ├── test17.bson
│       │   │   │   │   │       │   ├── test18.bson
│       │   │   │   │   │       │   ├── test19.bson
│       │   │   │   │   │       │   ├── test2.bson
│       │   │   │   │   │       │   ├── test20.bson
│       │   │   │   │   │       │   ├── test21.bson
│       │   │   │   │   │       │   ├── test22.bson
│       │   │   │   │   │       │   ├── test23.bson
│       │   │   │   │   │       │   ├── test24.bson
│       │   │   │   │   │       │   ├── test25.bson
│       │   │   │   │   │       │   ├── test26.bson
│       │   │   │   │   │       │   ├── test27.bson
│       │   │   │   │   │       │   ├── test28.bson
│       │   │   │   │   │       │   ├── test29.bson
│       │   │   │   │   │       │   ├── test3.bson
│       │   │   │   │   │       │   ├── test30.bson
│       │   │   │   │   │       │   ├── test31.bson
│       │   │   │   │   │       │   ├── test32.bson
│       │   │   │   │   │       │   ├── test33.bson
│       │   │   │   │   │       │   ├── test34.bson
│       │   │   │   │   │       │   ├── test35.bson
│       │   │   │   │   │       │   ├── test36.bson
│       │   │   │   │   │       │   ├── test37.bson
│       │   │   │   │   │       │   ├── test38.bson
│       │   │   │   │   │       │   ├── test39.bson
│       │   │   │   │   │       │   ├── test4.bson
│       │   │   │   │   │       │   ├── test40.bson
│       │   │   │   │   │       │   ├── test41.bson
│       │   │   │   │   │       │   ├── test42.bson
│       │   │   │   │   │       │   ├── test43.bson
│       │   │   │   │   │       │   ├── test44.bson
│       │   │   │   │   │       │   ├── test45.bson
│       │   │   │   │   │       │   ├── test46.bson
│       │   │   │   │   │       │   ├── test47.bson
│       │   │   │   │   │       │   ├── test48.bson
│       │   │   │   │   │       │   ├── test49.bson
│       │   │   │   │   │       │   ├── test5.bson
│       │   │   │   │   │       │   ├── test50.bson
│       │   │   │   │   │       │   ├── test51.bson
│       │   │   │   │   │       │   ├── test52.bson
│       │   │   │   │   │       │   ├── test53.bson
│       │   │   │   │   │       │   ├── test54.bson
│       │   │   │   │   │       │   ├── test55.bson
│       │   │   │   │   │       │   ├── test56.bson
│       │   │   │   │   │       │   ├── test57.bson
│       │   │   │   │   │       │   ├── test58.bson
│       │   │   │   │   │       │   ├── test59.bson
│       │   │   │   │   │       │   ├── test6.bson
│       │   │   │   │   │       │   ├── test7.bson
│       │   │   │   │   │       │   ├── test8.bson
│       │   │   │   │   │       │   ├── test9.bson
│       │   │   │   │   │       │   └── trailingnull.bson
│       │   │   │   │   │       ├── corpus-test.c
│       │   │   │   │   │       ├── corpus-test.h
│       │   │   │   │   │       ├── json/
│       │   │   │   │   │       │   ├── bson_corpus/
│       │   │   │   │   │       │   │   ├── array.json
│       │   │   │   │   │       │   │   ├── binary.json
│       │   │   │   │   │       │   │   ├── boolean.json
│       │   │   │   │   │       │   │   ├── code.json
│       │   │   │   │   │       │   │   ├── code_w_scope.json
│       │   │   │   │   │       │   │   ├── datetime.json
│       │   │   │   │   │       │   │   ├── dbpointer.json
│       │   │   │   │   │       │   │   ├── dbref.json
│       │   │   │   │   │       │   │   ├── decimal128-1.json
│       │   │   │   │   │       │   │   ├── decimal128-2.json
│       │   │   │   │   │       │   │   ├── decimal128-3.json
│       │   │   │   │   │       │   │   ├── decimal128-4.json
│       │   │   │   │   │       │   │   ├── decimal128-5.json
│       │   │   │   │   │       │   │   ├── decimal128-6.json
│       │   │   │   │   │       │   │   ├── decimal128-7.json
│       │   │   │   │   │       │   │   ├── decimal128-mongoc.json
│       │   │   │   │   │       │   │   ├── document.json
│       │   │   │   │   │       │   │   ├── double.json
│       │   │   │   │   │       │   │   ├── double2.json
│       │   │   │   │   │       │   │   ├── int32.json
│       │   │   │   │   │       │   │   ├── int64.json
│       │   │   │   │   │       │   │   ├── maxkey.json
│       │   │   │   │   │       │   │   ├── minkey.json
│       │   │   │   │   │       │   │   ├── multi-type-deprecated.json
│       │   │   │   │   │       │   │   ├── multi-type.json
│       │   │   │   │   │       │   │   ├── null.json
│       │   │   │   │   │       │   │   ├── oid.json
│       │   │   │   │   │       │   │   ├── regex.json
│       │   │   │   │   │       │   │   ├── string.json
│       │   │   │   │   │       │   │   ├── symbol.json
│       │   │   │   │   │       │   │   ├── timestamp.json
│       │   │   │   │   │       │   │   ├── top.json
│       │   │   │   │   │       │   │   └── undefined.json
│       │   │   │   │   │       │   └── test.json
│       │   │   │   │   │       ├── test-atomic.c
│       │   │   │   │   │       ├── test-bcon-basic.c
│       │   │   │   │   │       ├── test-bcon-extract.c
│       │   │   │   │   │       ├── test-bson-corpus.c
│       │   │   │   │   │       ├── test-bson-error.c
│       │   │   │   │   │       ├── test-bson-version.c
│       │   │   │   │   │       ├── test-bson.c
│       │   │   │   │   │       ├── test-clock.c
│       │   │   │   │   │       ├── test-decimal128.c
│       │   │   │   │   │       ├── test-endian.c
│       │   │   │   │   │       ├── test-iso8601.c
│       │   │   │   │   │       ├── test-iter.c
│       │   │   │   │   │       ├── test-json.c
│       │   │   │   │   │       ├── test-oid.c
│       │   │   │   │   │       ├── test-reader.c
│       │   │   │   │   │       ├── test-string.c
│       │   │   │   │   │       ├── test-utf8.c
│       │   │   │   │   │       ├── test-value.c
│       │   │   │   │   │       └── test-writer.c
│       │   │   │   │   ├── libmongoc/
│       │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   ├── THIRD_PARTY_NOTICES
│       │   │   │   │   │   ├── build/
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   └── cmake/
│       │   │   │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │   │   │       ├── libmongoc-1.0-config-version.cmake.in
│       │   │   │   │   │   │       ├── libmongoc-1.0-config.cmake.in
│       │   │   │   │   │   │       ├── libmongoc-static-1.0-config-version.cmake.in
│       │   │   │   │   │   │       └── libmongoc-static-1.0-config.cmake.in
│       │   │   │   │   │   ├── doc/
│       │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── advanced-connections.rst
│       │   │   │   │   │   │   ├── aggregate.rst
│       │   │   │   │   │   │   ├── api.rst
│       │   │   │   │   │   │   ├── application-performance-monitoring.rst
│       │   │   │   │   │   │   ├── authentication.rst
│       │   │   │   │   │   │   ├── basic-troubleshooting.rst
│       │   │   │   │   │   │   ├── bulk.rst
│       │   │   │   │   │   │   ├── conf.py
│       │   │   │   │   │   │   ├── connection-pooling.rst
│       │   │   │   │   │   │   ├── create-indexes.rst
│       │   │   │   │   │   │   ├── cursors.rst
│       │   │   │   │   │   │   ├── debugging.rst
│       │   │   │   │   │   │   ├── distinct-mapreduce.rst
│       │   │   │   │   │   │   ├── errors.rst
│       │   │   │   │   │   │   ├── full_index.rst
│       │   │   │   │   │   │   ├── gridfs.rst
│       │   │   │   │   │   │   ├── guides.rst
│       │   │   │   │   │   │   ├── html/
│       │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   ├── includes/
│       │   │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   │   ├── aggregate-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-insert-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-remove-many-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-remove-one-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-remove-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-replace-one-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-update-many-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-update-one-opts.txt
│       │   │   │   │   │   │   │   ├── cast-away-td-const.txt
│       │   │   │   │   │   │   │   ├── change-stream-opts.txt
│       │   │   │   │   │   │   │   ├── create-index-opts.txt
│       │   │   │   │   │   │   │   ├── delete-many-opts.txt
│       │   │   │   │   │   │   │   ├── delete-one-opts.txt
│       │   │   │   │   │   │   │   ├── generic-opts.txt
│       │   │   │   │   │   │   │   ├── gridfs-bucket-opts.txt
│       │   │   │   │   │   │   │   ├── gridfs-bucket-upload-opts.txt
│       │   │   │   │   │   │   │   ├── init_cleanup.txt
│       │   │   │   │   │   │   │   ├── insert-many-opts.txt
│       │   │   │   │   │   │   │   ├── insert-one-opts.txt
│       │   │   │   │   │   │   │   ├── ipv4-and-ipv6.txt
│       │   │   │   │   │   │   │   ├── mongoc_client_pool_call_once.txt
│       │   │   │   │   │   │   │   ├── mongoc_client_pool_thread_safe.txt
│       │   │   │   │   │   │   │   ├── not-retryable-read.txt
│       │   │   │   │   │   │   │   ├── opts-sources.txt
│       │   │   │   │   │   │   │   ├── read-cmd-opts-sources.txt
│       │   │   │   │   │   │   │   ├── read-opts-sources.txt
│       │   │   │   │   │   │   │   ├── read-opts.txt
│       │   │   │   │   │   │   │   ├── read-write-opts-sources.txt
│       │   │   │   │   │   │   │   ├── read-write-opts.txt
│       │   │   │   │   │   │   │   ├── replace-one-opts.txt
│       │   │   │   │   │   │   │   ├── retryable-read-aggregate.txt
│       │   │   │   │   │   │   │   ├── retryable-read-command.txt
│       │   │   │   │   │   │   │   ├── retryable-read.txt
│       │   │   │   │   │   │   │   ├── session-lifecycle.txt
│       │   │   │   │   │   │   │   ├── update-many-opts.txt
│       │   │   │   │   │   │   │   ├── update-one-opts.txt
│       │   │   │   │   │   │   │   ├── write-opts-sources.txt
│       │   │   │   │   │   │   │   └── write-opts.txt
│       │   │   │   │   │   │   ├── index.rst
│       │   │   │   │   │   │   ├── init-cleanup.rst
│       │   │   │   │   │   │   ├── installing.rst
│       │   │   │   │   │   │   ├── libbson-objects.inv
│       │   │   │   │   │   │   ├── lifecycle.rst
│       │   │   │   │   │   │   ├── logging.rst
│       │   │   │   │   │   │   ├── man/
│       │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   ├── matcher.rst
│       │   │   │   │   │   │   ├── mongoc-common-task-examples.rst
│       │   │   │   │   │   │   ├── mongoc_apm_callbacks_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_apm_callbacks_new.rst
│       │   │   │   │   │   │   ├── mongoc_apm_callbacks_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_command_name.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_duration.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_error.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_operation_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_reply.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_request_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_server_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_command.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_command_name.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_database_name.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_operation_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_request_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_server_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_command_name.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_duration.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_operation_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_reply.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_request_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_server_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_get_new_description.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_get_previous_description.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_closed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_closed_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_closed_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_closed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_failed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_failed_get_duration.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_failed_get_error.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_failed_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_failed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_started_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_started_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_started_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_succeeded_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_succeeded_get_duration.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_succeeded_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_succeeded_get_reply.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_succeeded_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_opening_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_opening_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_opening_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_opening_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_command_failed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_command_started_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_command_succeeded_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_changed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_closed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_heartbeat_failed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_heartbeat_started_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_heartbeat_succeeded_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_opening_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_topology_changed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_topology_closed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_topology_opening_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_changed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_changed_get_new_description.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_changed_get_previous_description.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_changed_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_changed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_closed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_closed_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_closed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_opening_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_opening_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_opening_t.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_bypass_auto_encryption.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_extra.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_keyvault_client.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_keyvault_client_pool.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_keyvault_namespace.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_kms_providers.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_schema_map.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_t.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_delete.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_delete_one.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_execute.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_get_hint.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_insert.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_insert_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_remove.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_remove_many_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_remove_one.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_remove_one_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_replace_one.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_replace_one_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_set_bypass_document_validation.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_set_client_session.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_set_hint.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_t.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_update.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_update_many_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_update_one.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_update_one_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_change_stream_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_change_stream_error_document.rst
│       │   │   │   │   │   │   ├── mongoc_change_stream_get_resume_token.rst
│       │   │   │   │   │   │   ├── mongoc_change_stream_next.rst
│       │   │   │   │   │   │   ├── mongoc_change_stream_t.rst
│       │   │   │   │   │   │   ├── mongoc_check_version.rst
│       │   │   │   │   │   │   ├── mongoc_cleanup.rst
│       │   │   │   │   │   │   ├── mongoc_client_command.rst
│       │   │   │   │   │   │   ├── mongoc_client_command_simple.rst
│       │   │   │   │   │   │   ├── mongoc_client_command_simple_with_server_id.rst
│       │   │   │   │   │   │   ├── mongoc_client_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_enable_auto_encryption.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_create_datakey.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_datakey_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_datakey_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_datakey_opts_set_keyaltnames.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_datakey_opts_set_masterkey.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_datakey_opts_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_decrypt.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_set_algorithm.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_set_keyaltname.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_set_keyid.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_set_keyvault_client.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_set_keyvault_namespace.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_set_kms_providers.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_find_databases_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_collection.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_database.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_database_names.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_database_names_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_default_database.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_gridfs.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_max_bson_size.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_max_message_size.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_server_description.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_server_descriptions.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_server_status.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_uri.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_client_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_new_from_uri.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_enable_auto_encryption.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_max_size.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_min_size.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_pop.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_push.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_set_apm_callbacks.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_set_appname.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_set_error_api.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_set_ssl_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_try_pop.rst
│       │   │   │   │   │   │   ├── mongoc_client_read_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_read_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_reset.rst
│       │   │   │   │   │   │   ├── mongoc_client_select_server.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_abort_transaction.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_advance_cluster_time.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_advance_operation_time.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_append.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_commit_transaction.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_client.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_cluster_time.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_lsid.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_operation_time.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_server_id.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_transaction_state.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_in_transaction.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_start_transaction.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_with_transaction.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_with_transaction_cb_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_apm_callbacks.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_appname.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_error_api.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_ssl_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_stream_initiator.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_client_start_session.rst
│       │   │   │   │   │   │   ├── mongoc_client_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_watch.rst
│       │   │   │   │   │   │   ├── mongoc_client_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_aggregate.rst
│       │   │   │   │   │   │   ├── mongoc_collection_command.rst
│       │   │   │   │   │   │   ├── mongoc_collection_command_simple.rst
│       │   │   │   │   │   │   ├── mongoc_collection_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_copy.rst
│       │   │   │   │   │   │   ├── mongoc_collection_count.rst
│       │   │   │   │   │   │   ├── mongoc_collection_count_documents.rst
│       │   │   │   │   │   │   ├── mongoc_collection_count_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_create_bulk_operation.rst
│       │   │   │   │   │   │   ├── mongoc_collection_create_bulk_operation_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_create_index.rst
│       │   │   │   │   │   │   ├── mongoc_collection_create_index_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_delete.rst
│       │   │   │   │   │   │   ├── mongoc_collection_delete_many.rst
│       │   │   │   │   │   │   ├── mongoc_collection_delete_one.rst
│       │   │   │   │   │   │   ├── mongoc_collection_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_collection_drop.rst
│       │   │   │   │   │   │   ├── mongoc_collection_drop_index.rst
│       │   │   │   │   │   │   ├── mongoc_collection_drop_index_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_drop_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_ensure_index.rst
│       │   │   │   │   │   │   ├── mongoc_collection_estimated_document_count.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find_and_modify.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find_and_modify_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find_indexes.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find_indexes_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_get_last_error.rst
│       │   │   │   │   │   │   ├── mongoc_collection_get_name.rst
│       │   │   │   │   │   │   ├── mongoc_collection_get_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_collection_get_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_collection_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_collection_insert.rst
│       │   │   │   │   │   │   ├── mongoc_collection_insert_bulk.rst
│       │   │   │   │   │   │   ├── mongoc_collection_insert_many.rst
│       │   │   │   │   │   │   ├── mongoc_collection_insert_one.rst
│       │   │   │   │   │   │   ├── mongoc_collection_keys_to_index_string.rst
│       │   │   │   │   │   │   ├── mongoc_collection_read_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_read_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_remove.rst
│       │   │   │   │   │   │   ├── mongoc_collection_rename.rst
│       │   │   │   │   │   │   ├── mongoc_collection_rename_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_replace_one.rst
│       │   │   │   │   │   │   ├── mongoc_collection_save.rst
│       │   │   │   │   │   │   ├── mongoc_collection_set_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_collection_set_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_collection_set_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_collection_stats.rst
│       │   │   │   │   │   │   ├── mongoc_collection_t.rst
│       │   │   │   │   │   │   ├── mongoc_collection_update.rst
│       │   │   │   │   │   │   ├── mongoc_collection_update_many.rst
│       │   │   │   │   │   │   ├── mongoc_collection_update_one.rst
│       │   │   │   │   │   │   ├── mongoc_collection_validate.rst
│       │   │   │   │   │   │   ├── mongoc_collection_watch.rst
│       │   │   │   │   │   │   ├── mongoc_collection_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_clone.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_current.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_error.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_error_document.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_batch_size.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_hint.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_id.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_limit.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_max_await_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_is_alive.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_more.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_new_from_command_reply.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_new_from_command_reply_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_next.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_set_batch_size.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_set_hint.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_set_limit.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_set_max_await_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_t.rst
│       │   │   │   │   │   │   ├── mongoc_database_add_user.rst
│       │   │   │   │   │   │   ├── mongoc_database_aggregate.rst
│       │   │   │   │   │   │   ├── mongoc_database_command.rst
│       │   │   │   │   │   │   ├── mongoc_database_command_simple.rst
│       │   │   │   │   │   │   ├── mongoc_database_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_copy.rst
│       │   │   │   │   │   │   ├── mongoc_database_create_collection.rst
│       │   │   │   │   │   │   ├── mongoc_database_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_database_drop.rst
│       │   │   │   │   │   │   ├── mongoc_database_drop_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_find_collections.rst
│       │   │   │   │   │   │   ├── mongoc_database_find_collections_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_collection.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_collection_names.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_collection_names_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_name.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_database_has_collection.rst
│       │   │   │   │   │   │   ├── mongoc_database_read_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_read_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_remove_all_users.rst
│       │   │   │   │   │   │   ├── mongoc_database_remove_user.rst
│       │   │   │   │   │   │   ├── mongoc_database_set_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_database_set_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_database_set_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_database_t.rst
│       │   │   │   │   │   │   ├── mongoc_database_watch.rst
│       │   │   │   │   │   │   ├── mongoc_database_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_delete_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_error_has_label.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_append.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_bypass_document_validation.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_fields.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_flags.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_max_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_sort.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_update.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_bypass_document_validation.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_fields.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_flags.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_max_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_sort.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_update.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_t.rst
│       │   │   │   │   │   │   ├── mongoc_get_major_version.rst
│       │   │   │   │   │   │   ├── mongoc_get_micro_version.rst
│       │   │   │   │   │   │   ├── mongoc_get_minor_version.rst
│       │   │   │   │   │   │   ├── mongoc_get_version.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_abort_upload.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_delete_by_id.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_download_to_stream.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_find.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_new.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_open_download_stream.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_open_upload_stream.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_open_upload_stream_with_id.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_stream_error.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_t.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_upload_from_stream.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_upload_from_stream_with_id.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_create_file.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_create_file_from_stream.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_drop.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_error.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_aliases.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_chunk_size.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_content_type.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_filename.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_id.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_length.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_md5.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_metadata.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_upload_date.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_list_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_list_error.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_list_next.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_list_t.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_opt_t.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_readv.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_remove.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_save.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_seek.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_aliases.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_content_type.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_filename.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_id.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_md5.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_metadata.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_t.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_tell.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_writev.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_find.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_find_one.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_find_one_by_filename.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_find_one_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_find_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_get_chunks.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_get_files.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_remove_by_filename.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_t.rst
│       │   │   │   │   │   │   ├── mongoc_host_list_t.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_geo_get_default.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_geo_init.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_geo_t.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_get_default.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_init.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_t.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_wt_get_default.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_wt_init.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_wt_t.rst
│       │   │   │   │   │   │   ├── mongoc_init.rst
│       │   │   │   │   │   │   ├── mongoc_insert_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_iovec_t.rst
│       │   │   │   │   │   │   ├── mongoc_matcher_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_matcher_match.rst
│       │   │   │   │   │   │   ├── mongoc_matcher_new.rst
│       │   │   │   │   │   │   ├── mongoc_matcher_t.rst
│       │   │   │   │   │   │   ├── mongoc_query_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_rand.rst
│       │   │   │   │   │   │   ├── mongoc_rand_add.rst
│       │   │   │   │   │   │   ├── mongoc_rand_seed.rst
│       │   │   │   │   │   │   ├── mongoc_rand_status.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_append.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_copy.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_get_level.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_is_default.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_new.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_set_level.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_t.rst
│       │   │   │   │   │   │   ├── mongoc_read_mode_t.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_add_tag.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_copy.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_get_max_staleness_seconds.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_get_mode.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_get_tags.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_is_valid.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_new.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_set_max_staleness_seconds.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_set_mode.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_set_tags.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_t.rst
│       │   │   │   │   │   │   ├── mongoc_remove_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_reply_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_host.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_id.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_ismaster.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_last_update_time.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_new_copy.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_round_trip_time.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_t.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_type.rst
│       │   │   │   │   │   │   ├── mongoc_server_descriptions_destroy_all.rst
│       │   │   │   │   │   │   ├── mongoc_session_opt_t.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_clone.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_get_causal_consistency.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_get_default_transaction_opts.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_get_transaction_opts.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_set_causal_consistency.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_set_default_transaction_opts.rst
│       │   │   │   │   │   │   ├── mongoc_socket_accept.rst
│       │   │   │   │   │   │   ├── mongoc_socket_bind.rst
│       │   │   │   │   │   │   ├── mongoc_socket_close.rst
│       │   │   │   │   │   │   ├── mongoc_socket_connect.rst
│       │   │   │   │   │   │   ├── mongoc_socket_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_socket_errno.rst
│       │   │   │   │   │   │   ├── mongoc_socket_getnameinfo.rst
│       │   │   │   │   │   │   ├── mongoc_socket_getsockname.rst
│       │   │   │   │   │   │   ├── mongoc_socket_listen.rst
│       │   │   │   │   │   │   ├── mongoc_socket_new.rst
│       │   │   │   │   │   │   ├── mongoc_socket_recv.rst
│       │   │   │   │   │   │   ├── mongoc_socket_send.rst
│       │   │   │   │   │   │   ├── mongoc_socket_sendv.rst
│       │   │   │   │   │   │   ├── mongoc_socket_setsockopt.rst
│       │   │   │   │   │   │   ├── mongoc_socket_t.rst
│       │   │   │   │   │   │   ├── mongoc_ssl_opt_get_default.rst
│       │   │   │   │   │   │   ├── mongoc_ssl_opt_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_buffered_new.rst
│       │   │   │   │   │   │   ├── mongoc_stream_buffered_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_close.rst
│       │   │   │   │   │   │   ├── mongoc_stream_cork.rst
│       │   │   │   │   │   │   ├── mongoc_stream_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_stream_file_get_fd.rst
│       │   │   │   │   │   │   ├── mongoc_stream_file_new.rst
│       │   │   │   │   │   │   ├── mongoc_stream_file_new_for_path.rst
│       │   │   │   │   │   │   ├── mongoc_stream_file_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_flush.rst
│       │   │   │   │   │   │   ├── mongoc_stream_get_base_stream.rst
│       │   │   │   │   │   │   ├── mongoc_stream_gridfs_new.rst
│       │   │   │   │   │   │   ├── mongoc_stream_read.rst
│       │   │   │   │   │   │   ├── mongoc_stream_readv.rst
│       │   │   │   │   │   │   ├── mongoc_stream_setsockopt.rst
│       │   │   │   │   │   │   ├── mongoc_stream_should_retry.rst
│       │   │   │   │   │   │   ├── mongoc_stream_socket_get_socket.rst
│       │   │   │   │   │   │   ├── mongoc_stream_socket_new.rst
│       │   │   │   │   │   │   ├── mongoc_stream_socket_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_timed_out.rst
│       │   │   │   │   │   │   ├── mongoc_stream_tls_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_uncork.rst
│       │   │   │   │   │   │   ├── mongoc_stream_write.rst
│       │   │   │   │   │   │   ├── mongoc_stream_writev.rst
│       │   │   │   │   │   │   ├── mongoc_topology_description_get_servers.rst
│       │   │   │   │   │   │   ├── mongoc_topology_description_has_readable_server.rst
│       │   │   │   │   │   │   ├── mongoc_topology_description_has_writable_server.rst
│       │   │   │   │   │   │   ├── mongoc_topology_description_t.rst
│       │   │   │   │   │   │   ├── mongoc_topology_description_type.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opt_t.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_clone.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_get_max_commit_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_get_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_get_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_set_max_commit_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_set_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_set_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_set_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_state_t.rst
│       │   │   │   │   │   │   ├── mongoc_update_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_uri_copy.rst
│       │   │   │   │   │   │   ├── mongoc_uri_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_auth_mechanism.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_auth_source.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_compressors.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_database.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_hosts.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_mechanism_properties.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_option_as_bool.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_option_as_int32.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_option_as_int64.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_option_as_utf8.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_options.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_password.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_read_prefs_t.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_replica_set.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_service.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_ssl.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_string.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_tls.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_username.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_uri_new.rst
│       │   │   │   │   │   │   ├── mongoc_uri_new_for_host_port.rst
│       │   │   │   │   │   │   ├── mongoc_uri_new_with_error.rst
│       │   │   │   │   │   │   ├── mongoc_uri_option_is_bool.rst
│       │   │   │   │   │   │   ├── mongoc_uri_option_is_int32.rst
│       │   │   │   │   │   │   ├── mongoc_uri_option_is_int64.rst
│       │   │   │   │   │   │   ├── mongoc_uri_option_is_utf8.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_auth_mechanism.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_auth_source.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_compressors.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_database.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_mechanism_properties.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_option_as_bool.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_option_as_int32.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_option_as_int64.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_option_as_utf8.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_password.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_read_prefs_t.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_username.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_uri_t.rst
│       │   │   │   │   │   │   ├── mongoc_uri_unescape.rst
│       │   │   │   │   │   │   ├── mongoc_version.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_append.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_copy.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_fsync.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_journal.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_w.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_wmajority.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_wtag.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_wtimeout.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_wtimeout_int64.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_is_acknowledged.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_is_default.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_is_valid.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_journal_is_set.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_new.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_fsync.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_journal.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_w.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_wmajority.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_wtag.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_wtimeout.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_wtimeout_int64.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_t.rst
│       │   │   │   │   │   │   ├── static/
│       │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   ├── tutorial.rst
│       │   │   │   │   │   │   ├── using_client_side_encryption.rst
│       │   │   │   │   │   │   └── visual-studio-guide.rst
│       │   │   │   │   │   ├── examples/
│       │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── aggregation/
│       │   │   │   │   │   │   │   └── aggregation1.c
│       │   │   │   │   │   │   ├── basic_aggregation/
│       │   │   │   │   │   │   │   ├── basic-aggregation.c
│       │   │   │   │   │   │   │   ├── constants.c
│       │   │   │   │   │   │   │   ├── distinct.c
│       │   │   │   │   │   │   │   ├── map-reduce-advanced.c
│       │   │   │   │   │   │   │   └── map-reduce-basic.c
│       │   │   │   │   │   │   ├── bulk/
│       │   │   │   │   │   │   │   ├── bulk-collation.c
│       │   │   │   │   │   │   │   ├── bulk1.c
│       │   │   │   │   │   │   │   ├── bulk2.c
│       │   │   │   │   │   │   │   ├── bulk3.c
│       │   │   │   │   │   │   │   ├── bulk4.c
│       │   │   │   │   │   │   │   ├── bulk5.c
│       │   │   │   │   │   │   │   └── bulk6.c
│       │   │   │   │   │   │   ├── client-side-encryption-auto-decryption.c
│       │   │   │   │   │   │   ├── client-side-encryption-explicit.c
│       │   │   │   │   │   │   ├── client-side-encryption-helpers.c
│       │   │   │   │   │   │   ├── client-side-encryption-helpers.h
│       │   │   │   │   │   │   ├── client-side-encryption-schema-map.c
│       │   │   │   │   │   │   ├── client-side-encryption-server-schema.c
│       │   │   │   │   │   │   ├── cmake/
│       │   │   │   │   │   │   │   ├── find_package/
│       │   │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   │   └── find_package_static/
│       │   │   │   │   │   │   │       └── CMakeLists.txt
│       │   │   │   │   │   │   ├── cmake-deprecated/
│       │   │   │   │   │   │   │   ├── find_package/
│       │   │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   │   └── find_package_static/
│       │   │   │   │   │   │   │       └── CMakeLists.txt
│       │   │   │   │   │   │   ├── common_operations/
│       │   │   │   │   │   │   │   ├── common-operations.c
│       │   │   │   │   │   │   │   └── explain.c
│       │   │   │   │   │   │   ├── compile-with-pkg-config-static.sh
│       │   │   │   │   │   │   ├── compile-with-pkg-config.sh
│       │   │   │   │   │   │   ├── doc-common-insert.c
│       │   │   │   │   │   │   ├── example-client.c
│       │   │   │   │   │   │   ├── example-collection-watch.c
│       │   │   │   │   │   │   ├── example-command-monitoring.c
│       │   │   │   │   │   │   ├── example-command-with-opts.c
│       │   │   │   │   │   │   ├── example-create-indexes.c
│       │   │   │   │   │   │   ├── example-gridfs-bucket.c
│       │   │   │   │   │   │   ├── example-gridfs.c
│       │   │   │   │   │   │   ├── example-pool.c
│       │   │   │   │   │   │   ├── example-resume.c
│       │   │   │   │   │   │   ├── example-scram.c
│       │   │   │   │   │   │   ├── example-sdam-monitoring.c
│       │   │   │   │   │   │   ├── example-session.c
│       │   │   │   │   │   │   ├── example-start-at-optime.c
│       │   │   │   │   │   │   ├── example-transaction.c
│       │   │   │   │   │   │   ├── example-update.c
│       │   │   │   │   │   │   ├── example-with-transaction-cb.c
│       │   │   │   │   │   │   ├── find-and-modify.c
│       │   │   │   │   │   │   ├── find_and_modify_with_opts/
│       │   │   │   │   │   │   │   └── fam.c
│       │   │   │   │   │   │   ├── hello_mongoc.c
│       │   │   │   │   │   │   ├── manual_build_against_deprecated_lib_prefix/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── hello_mongoc.sln
│       │   │   │   │   │   │   │   ├── hello_mongoc.vcxproj
│       │   │   │   │   │   │   │   └── hello_mongoc.vcxproj.filters
│       │   │   │   │   │   │   ├── manual_build_against_deprecated_lib_prefix_static/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── hello_mongoc.sln
│       │   │   │   │   │   │   │   ├── hello_mongoc.vcxproj
│       │   │   │   │   │   │   │   └── hello_mongoc.vcxproj.filters
│       │   │   │   │   │   │   ├── mongoc-dump.c
│       │   │   │   │   │   │   ├── mongoc-ping.c
│       │   │   │   │   │   │   ├── mongoc-tail.c
│       │   │   │   │   │   │   └── parse_handshake_cfg.py
│       │   │   │   │   │   ├── src/
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── libmongoc-1.0.pc.in
│       │   │   │   │   │   │   ├── libmongoc-ssl-1.0.pc.in
│       │   │   │   │   │   │   ├── libmongoc-static-1.0.pc.in
│       │   │   │   │   │   │   ├── mongoc/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   │   ├── forwarding/
│       │   │   │   │   │   │   │   │   └── mongoc.h
│       │   │   │   │   │   │   │   ├── mongoc-aggregate-private.h
│       │   │   │   │   │   │   │   ├── mongoc-aggregate.c
│       │   │   │   │   │   │   │   ├── mongoc-apm-private.h
│       │   │   │   │   │   │   │   ├── mongoc-apm.c
│       │   │   │   │   │   │   │   ├── mongoc-apm.h
│       │   │   │   │   │   │   │   ├── mongoc-array-private.h
│       │   │   │   │   │   │   │   ├── mongoc-array.c
│       │   │   │   │   │   │   │   ├── mongoc-async-cmd-private.h
│       │   │   │   │   │   │   │   ├── mongoc-async-cmd.c
│       │   │   │   │   │   │   │   ├── mongoc-async-private.h
│       │   │   │   │   │   │   │   ├── mongoc-async.c
│       │   │   │   │   │   │   │   ├── mongoc-buffer-private.h
│       │   │   │   │   │   │   │   ├── mongoc-buffer.c
│       │   │   │   │   │   │   │   ├── mongoc-bulk-operation-private.h
│       │   │   │   │   │   │   │   ├── mongoc-bulk-operation.c
│       │   │   │   │   │   │   │   ├── mongoc-bulk-operation.h
│       │   │   │   │   │   │   │   ├── mongoc-change-stream-private.h
│       │   │   │   │   │   │   │   ├── mongoc-change-stream.c
│       │   │   │   │   │   │   │   ├── mongoc-change-stream.h
│       │   │   │   │   │   │   │   ├── mongoc-client-pool-private.h
│       │   │   │   │   │   │   │   ├── mongoc-client-pool.c
│       │   │   │   │   │   │   │   ├── mongoc-client-pool.h
│       │   │   │   │   │   │   │   ├── mongoc-client-private.h
│       │   │   │   │   │   │   │   ├── mongoc-client-session-private.h
│       │   │   │   │   │   │   │   ├── mongoc-client-session.c
│       │   │   │   │   │   │   │   ├── mongoc-client-session.h
│       │   │   │   │   │   │   │   ├── mongoc-client-side-encryption-private.h
│       │   │   │   │   │   │   │   ├── mongoc-client-side-encryption.c
│       │   │   │   │   │   │   │   ├── mongoc-client-side-encryption.h
│       │   │   │   │   │   │   │   ├── mongoc-client.c
│       │   │   │   │   │   │   │   ├── mongoc-client.h
│       │   │   │   │   │   │   │   ├── mongoc-cluster-cyrus-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cluster-cyrus.c
│       │   │   │   │   │   │   │   ├── mongoc-cluster-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cluster-sasl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cluster-sasl.c
│       │   │   │   │   │   │   │   ├── mongoc-cluster-sspi-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cluster-sspi.c
│       │   │   │   │   │   │   │   ├── mongoc-cluster.c
│       │   │   │   │   │   │   │   ├── mongoc-cmd-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cmd.c
│       │   │   │   │   │   │   │   ├── mongoc-collection-private.h
│       │   │   │   │   │   │   │   ├── mongoc-collection.c
│       │   │   │   │   │   │   │   ├── mongoc-collection.h
│       │   │   │   │   │   │   │   ├── mongoc-compression-private.h
│       │   │   │   │   │   │   │   ├── mongoc-compression.c
│       │   │   │   │   │   │   │   ├── mongoc-config.h.in
│       │   │   │   │   │   │   │   ├── mongoc-counters-private.h
│       │   │   │   │   │   │   │   ├── mongoc-counters.c
│       │   │   │   │   │   │   │   ├── mongoc-counters.defs
│       │   │   │   │   │   │   │   ├── mongoc-crypt-private.h
│       │   │   │   │   │   │   │   ├── mongoc-crypt.c
│       │   │   │   │   │   │   │   ├── mongoc-crypto-cng-private.h
│       │   │   │   │   │   │   │   ├── mongoc-crypto-cng.c
│       │   │   │   │   │   │   │   ├── mongoc-crypto-common-crypto-private.h
│       │   │   │   │   │   │   │   ├── mongoc-crypto-common-crypto.c
│       │   │   │   │   │   │   │   ├── mongoc-crypto-openssl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-crypto-openssl.c
│       │   │   │   │   │   │   │   ├── mongoc-crypto-private.h
│       │   │   │   │   │   │   │   ├── mongoc-crypto.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-array.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-change-stream.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-cmd-deprecated.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-cmd.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-find-cmd.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-find-opquery.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-find.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-legacy.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cursor.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor.h
│       │   │   │   │   │   │   │   ├── mongoc-cyrus-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cyrus.c
│       │   │   │   │   │   │   │   ├── mongoc-database-private.h
│       │   │   │   │   │   │   │   ├── mongoc-database.c
│       │   │   │   │   │   │   │   ├── mongoc-database.h
│       │   │   │   │   │   │   │   ├── mongoc-errno-private.h
│       │   │   │   │   │   │   │   ├── mongoc-error-private.h
│       │   │   │   │   │   │   │   ├── mongoc-error.c
│       │   │   │   │   │   │   │   ├── mongoc-error.h
│       │   │   │   │   │   │   │   ├── mongoc-find-and-modify-private.h
│       │   │   │   │   │   │   │   ├── mongoc-find-and-modify.c
│       │   │   │   │   │   │   │   ├── mongoc-find-and-modify.h
│       │   │   │   │   │   │   │   ├── mongoc-flags.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-bucket-file-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-bucket-file.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-bucket-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-bucket.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-bucket.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-list-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-list.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-list.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-page-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-page.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-page.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs.h
│       │   │   │   │   │   │   │   ├── mongoc-handshake-compiler-private.h
│       │   │   │   │   │   │   │   ├── mongoc-handshake-os-private.h
│       │   │   │   │   │   │   │   ├── mongoc-handshake-private.h
│       │   │   │   │   │   │   │   ├── mongoc-handshake.c
│       │   │   │   │   │   │   │   ├── mongoc-handshake.h
│       │   │   │   │   │   │   │   ├── mongoc-host-list-private.h
│       │   │   │   │   │   │   │   ├── mongoc-host-list.c
│       │   │   │   │   │   │   │   ├── mongoc-host-list.h
│       │   │   │   │   │   │   │   ├── mongoc-index.c
│       │   │   │   │   │   │   │   ├── mongoc-index.h
│       │   │   │   │   │   │   │   ├── mongoc-init.c
│       │   │   │   │   │   │   │   ├── mongoc-init.h
│       │   │   │   │   │   │   │   ├── mongoc-iovec.h
│       │   │   │   │   │   │   │   ├── mongoc-libressl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-libressl.c
│       │   │   │   │   │   │   │   ├── mongoc-linux-distro-scanner-private.h
│       │   │   │   │   │   │   │   ├── mongoc-linux-distro-scanner.c
│       │   │   │   │   │   │   │   ├── mongoc-list-private.h
│       │   │   │   │   │   │   │   ├── mongoc-list.c
│       │   │   │   │   │   │   │   ├── mongoc-log-private.h
│       │   │   │   │   │   │   │   ├── mongoc-log.c
│       │   │   │   │   │   │   │   ├── mongoc-log.h
│       │   │   │   │   │   │   │   ├── mongoc-macros.h
│       │   │   │   │   │   │   │   ├── mongoc-matcher-op-private.h
│       │   │   │   │   │   │   │   ├── mongoc-matcher-op.c
│       │   │   │   │   │   │   │   ├── mongoc-matcher-private.h
│       │   │   │   │   │   │   │   ├── mongoc-matcher.c
│       │   │   │   │   │   │   │   ├── mongoc-matcher.h
│       │   │   │   │   │   │   │   ├── mongoc-memcmp-private.h
│       │   │   │   │   │   │   │   ├── mongoc-memcmp.c
│       │   │   │   │   │   │   │   ├── mongoc-opcode.h
│       │   │   │   │   │   │   │   ├── mongoc-openssl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-openssl.c
│       │   │   │   │   │   │   │   ├── mongoc-opts-helpers-private.h
│       │   │   │   │   │   │   │   ├── mongoc-opts-helpers.c
│       │   │   │   │   │   │   │   ├── mongoc-opts-private.h
│       │   │   │   │   │   │   │   ├── mongoc-opts.c
│       │   │   │   │   │   │   │   ├── mongoc-prelude.h
│       │   │   │   │   │   │   │   ├── mongoc-queue-private.h
│       │   │   │   │   │   │   │   ├── mongoc-queue.c
│       │   │   │   │   │   │   │   ├── mongoc-rand-cng.c
│       │   │   │   │   │   │   │   ├── mongoc-rand-common-crypto.c
│       │   │   │   │   │   │   │   ├── mongoc-rand-openssl.c
│       │   │   │   │   │   │   │   ├── mongoc-rand-private.h
│       │   │   │   │   │   │   │   ├── mongoc-rand.h
│       │   │   │   │   │   │   │   ├── mongoc-read-concern-private.h
│       │   │   │   │   │   │   │   ├── mongoc-read-concern.c
│       │   │   │   │   │   │   │   ├── mongoc-read-concern.h
│       │   │   │   │   │   │   │   ├── mongoc-read-prefs-private.h
│       │   │   │   │   │   │   │   ├── mongoc-read-prefs.c
│       │   │   │   │   │   │   │   ├── mongoc-read-prefs.h
│       │   │   │   │   │   │   │   ├── mongoc-rpc-private.h
│       │   │   │   │   │   │   │   ├── mongoc-rpc.c
│       │   │   │   │   │   │   │   ├── mongoc-sasl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-sasl.c
│       │   │   │   │   │   │   │   ├── mongoc-scram-private.h
│       │   │   │   │   │   │   │   ├── mongoc-scram.c
│       │   │   │   │   │   │   │   ├── mongoc-secure-channel-private.h
│       │   │   │   │   │   │   │   ├── mongoc-secure-channel.c
│       │   │   │   │   │   │   │   ├── mongoc-secure-transport-private.h
│       │   │   │   │   │   │   │   ├── mongoc-secure-transport.c
│       │   │   │   │   │   │   │   ├── mongoc-server-description-private.h
│       │   │   │   │   │   │   │   ├── mongoc-server-description.c
│       │   │   │   │   │   │   │   ├── mongoc-server-description.h
│       │   │   │   │   │   │   │   ├── mongoc-server-stream-private.h
│       │   │   │   │   │   │   │   ├── mongoc-server-stream.c
│       │   │   │   │   │   │   │   ├── mongoc-set-private.h
│       │   │   │   │   │   │   │   ├── mongoc-set.c
│       │   │   │   │   │   │   │   ├── mongoc-socket-private.h
│       │   │   │   │   │   │   │   ├── mongoc-socket.c
│       │   │   │   │   │   │   │   ├── mongoc-socket.h
│       │   │   │   │   │   │   │   ├── mongoc-ssl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-ssl.c
│       │   │   │   │   │   │   │   ├── mongoc-ssl.h
│       │   │   │   │   │   │   │   ├── mongoc-sspi-private.h
│       │   │   │   │   │   │   │   ├── mongoc-sspi.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-buffered.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-buffered.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-file.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-file.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs-download-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs-download.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs-upload-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs-upload.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-socket.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-socket.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-libressl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-libressl.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-libressl.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-openssl-bio-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-openssl-bio.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-openssl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-openssl.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-openssl.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-channel-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-channel.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-channel.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-transport-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-transport.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-transport.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls.h
│       │   │   │   │   │   │   │   ├── mongoc-stream.c
│       │   │   │   │   │   │   │   ├── mongoc-stream.h
│       │   │   │   │   │   │   │   ├── mongoc-thread-private.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-description-apm-private.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-description-apm.c
│       │   │   │   │   │   │   │   ├── mongoc-topology-description-private.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-description.c
│       │   │   │   │   │   │   │   ├── mongoc-topology-description.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-private.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-scanner-private.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-scanner.c
│       │   │   │   │   │   │   │   ├── mongoc-topology.c
│       │   │   │   │   │   │   │   ├── mongoc-trace-private.h
│       │   │   │   │   │   │   │   ├── mongoc-uri-private.h
│       │   │   │   │   │   │   │   ├── mongoc-uri.c
│       │   │   │   │   │   │   │   ├── mongoc-uri.h
│       │   │   │   │   │   │   │   ├── mongoc-util-private.h
│       │   │   │   │   │   │   │   ├── mongoc-util.c
│       │   │   │   │   │   │   │   ├── mongoc-version-functions.c
│       │   │   │   │   │   │   │   ├── mongoc-version-functions.h
│       │   │   │   │   │   │   │   ├── mongoc-version.h.in
│       │   │   │   │   │   │   │   ├── mongoc-write-command-legacy-private.h
│       │   │   │   │   │   │   │   ├── mongoc-write-command-legacy.c
│       │   │   │   │   │   │   │   ├── mongoc-write-command-private.h
│       │   │   │   │   │   │   │   ├── mongoc-write-command.c
│       │   │   │   │   │   │   │   ├── mongoc-write-concern-private.h
│       │   │   │   │   │   │   │   ├── mongoc-write-concern.c
│       │   │   │   │   │   │   │   ├── mongoc-write-concern.h
│       │   │   │   │   │   │   │   ├── mongoc.h
│       │   │   │   │   │   │   │   ├── op-compressed.def
│       │   │   │   │   │   │   │   ├── op-delete.def
│       │   │   │   │   │   │   │   ├── op-get-more.def
│       │   │   │   │   │   │   │   ├── op-header.def
│       │   │   │   │   │   │   │   ├── op-insert.def
│       │   │   │   │   │   │   │   ├── op-kill-cursors.def
│       │   │   │   │   │   │   │   ├── op-msg.def
│       │   │   │   │   │   │   │   ├── op-query.def
│       │   │   │   │   │   │   │   ├── op-reply-header.def
│       │   │   │   │   │   │   │   ├── op-reply.def
│       │   │   │   │   │   │   │   ├── op-update.def
│       │   │   │   │   │   │   │   └── utlist.h
│       │   │   │   │   │   │   └── mongoc-config.cmake
│       │   │   │   │   │   └── tests/
│       │   │   │   │   │       ├── .gitignore
│       │   │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │   │       ├── TestSuite.c
│       │   │   │   │   │       ├── TestSuite.h
│       │   │   │   │   │       ├── client_side_encryption_prose/
│       │   │   │   │   │       │   ├── corpus/
│       │   │   │   │   │       │   │   ├── corpus-encrypted.json
│       │   │   │   │   │       │   │   ├── corpus-key-aws.json
│       │   │   │   │   │       │   │   ├── corpus-key-local.json
│       │   │   │   │   │       │   │   ├── corpus-schema.json
│       │   │   │   │   │       │   │   └── corpus.json
│       │   │   │   │   │       │   ├── datakey-and-double-encryption-schemamap.json
│       │   │   │   │   │       │   ├── external/
│       │   │   │   │   │       │   │   ├── external-key.json
│       │   │   │   │   │       │   │   └── external-schema.json
│       │   │   │   │   │       │   ├── limits-doc.json
│       │   │   │   │   │       │   ├── limits-key.json
│       │   │   │   │   │       │   ├── limits-schema.json
│       │   │   │   │   │       │   └── schema.json
│       │   │   │   │   │       ├── debug-stream.c
│       │   │   │   │   │       ├── json/
│       │   │   │   │   │       │   ├── auth/
│       │   │   │   │   │       │   │   └── connection-string.json
│       │   │   │   │   │       │   ├── change_streams/
│       │   │   │   │   │       │   │   ├── change-streams-errors.json
│       │   │   │   │   │       │   │   └── change-streams.json
│       │   │   │   │   │       │   ├── client_side_encryption/
│       │   │   │   │   │       │   │   ├── aggregate.json
│       │   │   │   │   │       │   │   ├── badSchema.json
│       │   │   │   │   │       │   │   ├── basic.json
│       │   │   │   │   │       │   │   ├── bulk.json
│       │   │   │   │   │       │   │   ├── bypassAutoEncryption.json
│       │   │   │   │   │       │   │   ├── bypassedCommand.json
│       │   │   │   │   │       │   │   ├── count.json
│       │   │   │   │   │       │   │   ├── countDocuments.json
│       │   │   │   │   │       │   │   ├── delete.json
│       │   │   │   │   │       │   │   ├── distinct.json
│       │   │   │   │   │       │   │   ├── explain.json
│       │   │   │   │   │       │   │   ├── find.json
│       │   │   │   │   │       │   │   ├── findOneAndDelete.json
│       │   │   │   │   │       │   │   ├── findOneAndReplace.json
│       │   │   │   │   │       │   │   ├── findOneAndUpdate.json
│       │   │   │   │   │       │   │   ├── getMore.json
│       │   │   │   │   │       │   │   ├── insert.json
│       │   │   │   │   │       │   │   ├── keyAltName.json
│       │   │   │   │   │       │   │   ├── localKMS.json
│       │   │   │   │   │       │   │   ├── localSchema.json
│       │   │   │   │   │       │   │   ├── malformedCiphertext.json
│       │   │   │   │   │       │   │   ├── maxWireVersion.json
│       │   │   │   │   │       │   │   ├── missingKey.json
│       │   │   │   │   │       │   │   ├── replaceOne.json
│       │   │   │   │   │       │   │   ├── types.json
│       │   │   │   │   │       │   │   ├── updateMany.json
│       │   │   │   │   │       │   │   └── updateOne.json
│       │   │   │   │   │       │   ├── command_monitoring/
│       │   │   │   │   │       │   │   ├── bulkWrite.json
│       │   │   │   │   │       │   │   ├── command.json
│       │   │   │   │   │       │   │   ├── deleteMany.json
│       │   │   │   │   │       │   │   ├── deleteOne.json
│       │   │   │   │   │       │   │   ├── find.json
│       │   │   │   │   │       │   │   ├── insertMany.json
│       │   │   │   │   │       │   │   ├── insertOne.json
│       │   │   │   │   │       │   │   ├── unacknowledgedBulkWrite.json
│       │   │   │   │   │       │   │   ├── updateMany.json
│       │   │   │   │   │       │   │   └── updateOne.json
│       │   │   │   │   │       │   ├── connection_uri/
│       │   │   │   │   │       │   │   ├── README.rst
│       │   │   │   │   │       │   │   ├── additional-nonspec-tests.json
│       │   │   │   │   │       │   │   ├── invalid-uris.json
│       │   │   │   │   │       │   │   ├── valid-auth.json
│       │   │   │   │   │       │   │   ├── valid-db-with-dotted-name.json
│       │   │   │   │   │       │   │   ├── valid-host_identifiers.json
│       │   │   │   │   │       │   │   ├── valid-options.json
│       │   │   │   │   │       │   │   ├── valid-unix_socket-absolute.json
│       │   │   │   │   │       │   │   ├── valid-unix_socket-relative.json
│       │   │   │   │   │       │   │   └── valid-warnings.json
│       │   │   │   │   │       │   ├── crud/
│       │   │   │   │   │       │   │   ├── v1/
│       │   │   │   │   │       │   │   │   ├── read/
│       │   │   │   │   │       │   │   │   │   ├── aggregate-collation.json
│       │   │   │   │   │       │   │   │   │   ├── aggregate-out.json
│       │   │   │   │   │       │   │   │   │   ├── aggregate.json
│       │   │   │   │   │       │   │   │   │   ├── count-collation.json
│       │   │   │   │   │       │   │   │   │   ├── count-empty.json
│       │   │   │   │   │       │   │   │   │   ├── count.json
│       │   │   │   │   │       │   │   │   │   ├── distinct-collation.json
│       │   │   │   │   │       │   │   │   │   ├── distinct.json
│       │   │   │   │   │       │   │   │   │   ├── find-collation.json
│       │   │   │   │   │       │   │   │   │   └── find.json
│       │   │   │   │   │       │   │   │   └── write/
│       │   │   │   │   │       │   │   │       ├── bulkWrite-arrayFilters.json
│       │   │   │   │   │       │   │   │       ├── bulkWrite-collation.json
│       │   │   │   │   │       │   │   │       ├── bulkWrite.json
│       │   │   │   │   │       │   │   │       ├── deleteMany-collation.json
│       │   │   │   │   │       │   │   │       ├── deleteMany.json
│       │   │   │   │   │       │   │   │       ├── deleteOne-collation.json
│       │   │   │   │   │       │   │   │       ├── deleteOne.json
│       │   │   │   │   │       │   │   │       ├── findOneAndDelete-collation.json
│       │   │   │   │   │       │   │   │       ├── findOneAndDelete.json
│       │   │   │   │   │       │   │   │       ├── findOneAndReplace-collation.json
│       │   │   │   │   │       │   │   │       ├── findOneAndReplace-upsert.json
│       │   │   │   │   │       │   │   │       ├── findOneAndReplace.json
│       │   │   │   │   │       │   │   │       ├── findOneAndUpdate-arrayFilters.json
│       │   │   │   │   │       │   │   │       ├── findOneAndUpdate-collation.json
│       │   │   │   │   │       │   │   │       ├── findOneAndUpdate.json
│       │   │   │   │   │       │   │   │       ├── insertMany.json
│       │   │   │   │   │       │   │   │       ├── insertOne.json
│       │   │   │   │   │       │   │   │       ├── replaceOne-collation.json
│       │   │   │   │   │       │   │   │       ├── replaceOne.json
│       │   │   │   │   │       │   │   │       ├── updateMany-arrayFilters.json
│       │   │   │   │   │       │   │   │       ├── updateMany-collation.json
│       │   │   │   │   │       │   │   │       ├── updateMany.json
│       │   │   │   │   │       │   │   │       ├── updateOne-arrayFilters.json
│       │   │   │   │   │       │   │   │       ├── updateOne-collation.json
│       │   │   │   │   │       │   │   │       └── updateOne.json
│       │   │   │   │   │       │   │   └── v2/
│       │   │   │   │   │       │   │       ├── aggregate-merge.json
│       │   │   │   │   │       │   │       ├── aggregate-out-readConcern.json
│       │   │   │   │   │       │   │       ├── bulkWrite-arrayFilters.json
│       │   │   │   │   │       │   │       ├── bulkWrite-update-hint.json
│       │   │   │   │   │       │   │       ├── db-aggregate.json
│       │   │   │   │   │       │   │       ├── replaceOne-hint.json
│       │   │   │   │   │       │   │       ├── updateMany-hint.json
│       │   │   │   │   │       │   │       ├── updateOne-hint.json
│       │   │   │   │   │       │   │       └── updateWithPipelines.json
│       │   │   │   │   │       │   ├── gridfs/
│       │   │   │   │   │       │   │   ├── delete.json
│       │   │   │   │   │       │   │   ├── download.json
│       │   │   │   │   │       │   │   ├── download_by_name.json
│       │   │   │   │   │       │   │   └── upload.json
│       │   │   │   │   │       │   ├── initial_dns_auth/
│       │   │   │   │   │       │   │   ├── README
│       │   │   │   │   │       │   │   └── dns-auth.json
│       │   │   │   │   │       │   ├── initial_dns_seedlist_discovery/
│       │   │   │   │   │       │   │   ├── longer-parent-in-return.json
│       │   │   │   │   │       │   │   ├── misformatted-option.json
│       │   │   │   │   │       │   │   ├── no-results.json
│       │   │   │   │   │       │   │   ├── not-enough-parts.json
│       │   │   │   │   │       │   │   ├── one-result-default-port.json
│       │   │   │   │   │       │   │   ├── one-txt-record-multiple-strings.json
│       │   │   │   │   │       │   │   ├── one-txt-record.json
│       │   │   │   │   │       │   │   ├── parent-part-mismatch1.json
│       │   │   │   │   │       │   │   ├── parent-part-mismatch2.json
│       │   │   │   │   │       │   │   ├── parent-part-mismatch3.json
│       │   │   │   │   │       │   │   ├── parent-part-mismatch4.json
│       │   │   │   │   │       │   │   ├── parent-part-mismatch5.json
│       │   │   │   │   │       │   │   ├── returned-parent-too-short.json
│       │   │   │   │   │       │   │   ├── returned-parent-wrong.json
│       │   │   │   │   │       │   │   ├── two-results-default-port.json
│       │   │   │   │   │       │   │   ├── two-results-nonstandard-port.json
│       │   │   │   │   │       │   │   ├── two-txt-records.json
│       │   │   │   │   │       │   │   ├── txt-record-not-allowed-option.json
│       │   │   │   │   │       │   │   ├── txt-record-with-overridden-ssl-option.json
│       │   │   │   │   │       │   │   ├── txt-record-with-overridden-uri-option.json
│       │   │   │   │   │       │   │   ├── txt-record-with-unallowed-option.json
│       │   │   │   │   │       │   │   ├── uri-with-admin-database.json
│       │   │   │   │   │       │   │   ├── uri-with-port.json
│       │   │   │   │   │       │   │   └── uri-with-two-hosts.json
│       │   │   │   │   │       │   ├── max_staleness/
│       │   │   │   │   │       │   │   ├── ReplicaSetNoPrimary/
│       │   │   │   │   │       │   │   │   ├── DefaultNoMaxStaleness.json
│       │   │   │   │   │       │   │   │   ├── Incompatible.json
│       │   │   │   │   │       │   │   │   ├── LastUpdateTime.json
│       │   │   │   │   │       │   │   │   ├── Nearest.json
│       │   │   │   │   │       │   │   │   ├── Nearest2.json
│       │   │   │   │   │       │   │   │   ├── NoKnownServers.json
│       │   │   │   │   │       │   │   │   ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │   │   ├── PrimaryPreferred_tags.json
│       │   │   │   │   │       │   │   │   ├── Secondary.json
│       │   │   │   │   │       │   │   │   ├── SecondaryPreferred.json
│       │   │   │   │   │       │   │   │   ├── SecondaryPreferred_tags.json
│       │   │   │   │   │       │   │   │   └── ZeroMaxStaleness.json
│       │   │   │   │   │       │   │   ├── ReplicaSetWithPrimary/
│       │   │   │   │   │       │   │   │   ├── DefaultNoMaxStaleness.json
│       │   │   │   │   │       │   │   │   ├── Incompatible.json
│       │   │   │   │   │       │   │   │   ├── LastUpdateTime.json
│       │   │   │   │   │       │   │   │   ├── LongHeartbeat.json
│       │   │   │   │   │       │   │   │   ├── LongHeartbeat2.json
│       │   │   │   │   │       │   │   │   ├── MaxStalenessTooSmall.json
│       │   │   │   │   │       │   │   │   ├── MaxStalenessWithModePrimary.json
│       │   │   │   │   │       │   │   │   ├── Nearest.json
│       │   │   │   │   │       │   │   │   ├── Nearest2.json
│       │   │   │   │   │       │   │   │   ├── Nearest_tags.json
│       │   │   │   │   │       │   │   │   ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │   │   ├── PrimaryPreferred_incompatible.json
│       │   │   │   │   │       │   │   │   ├── SecondaryPreferred.json
│       │   │   │   │   │       │   │   │   ├── SecondaryPreferred_tags.json
│       │   │   │   │   │       │   │   │   ├── SecondaryPreferred_tags2.json
│       │   │   │   │   │       │   │   │   ├── Secondary_tags.json
│       │   │   │   │   │       │   │   │   ├── Secondary_tags2.json
│       │   │   │   │   │       │   │   │   └── ZeroMaxStaleness.json
│       │   │   │   │   │       │   │   ├── Sharded/
│       │   │   │   │   │       │   │   │   ├── Incompatible.json
│       │   │   │   │   │       │   │   │   └── SmallMaxStaleness.json
│       │   │   │   │   │       │   │   ├── Single/
│       │   │   │   │   │       │   │   │   ├── Incompatible.json
│       │   │   │   │   │       │   │   │   └── SmallMaxStaleness.json
│       │   │   │   │   │       │   │   ├── Unknown/
│       │   │   │   │   │       │   │   │   └── SmallMaxStaleness.json
│       │   │   │   │   │       │   │   └── supplemental/
│       │   │   │   │   │       │   │       └── MissingLastWriteDate.json
│       │   │   │   │   │       │   ├── read_write_concern/
│       │   │   │   │   │       │   │   ├── connection-string/
│       │   │   │   │   │       │   │   │   ├── read-concern.json
│       │   │   │   │   │       │   │   │   └── write-concern.json
│       │   │   │   │   │       │   │   └── document/
│       │   │   │   │   │       │   │       ├── read-concern.json
│       │   │   │   │   │       │   │       └── write-concern.json
│       │   │   │   │   │       │   ├── retryable_reads/
│       │   │   │   │   │       │   │   ├── README.rst
│       │   │   │   │   │       │   │   ├── aggregate-merge.json
│       │   │   │   │   │       │   │   ├── aggregate-serverErrors.json
│       │   │   │   │   │       │   │   ├── aggregate.json
│       │   │   │   │   │       │   │   ├── changeStreams-client.watch-serverErrors.json
│       │   │   │   │   │       │   │   ├── changeStreams-client.watch.json
│       │   │   │   │   │       │   │   ├── changeStreams-db.coll.watch-serverErrors.json
│       │   │   │   │   │       │   │   ├── changeStreams-db.coll.watch.json
│       │   │   │   │   │       │   │   ├── changeStreams-db.watch-serverErrors.json
│       │   │   │   │   │       │   │   ├── changeStreams-db.watch.json
│       │   │   │   │   │       │   │   ├── count-serverErrors.json
│       │   │   │   │   │       │   │   ├── count.json
│       │   │   │   │   │       │   │   ├── countDocuments-serverErrors.json
│       │   │   │   │   │       │   │   ├── countDocuments.json
│       │   │   │   │   │       │   │   ├── distinct-serverErrors.json
│       │   │   │   │   │       │   │   ├── distinct.json
│       │   │   │   │   │       │   │   ├── estimatedDocumentCount-serverErrors.json
│       │   │   │   │   │       │   │   ├── estimatedDocumentCount.json
│       │   │   │   │   │       │   │   ├── find-serverErrors.json
│       │   │   │   │   │       │   │   ├── find.json
│       │   │   │   │   │       │   │   ├── findOne-serverErrors.json
│       │   │   │   │   │       │   │   ├── findOne.json
│       │   │   │   │   │       │   │   ├── gridfs-download-serverErrors.json
│       │   │   │   │   │       │   │   ├── gridfs-download.json
│       │   │   │   │   │       │   │   ├── gridfs-downloadByName-serverErrors.json
│       │   │   │   │   │       │   │   ├── gridfs-downloadByName.json
│       │   │   │   │   │       │   │   ├── listCollectionNames-serverErrors.json
│       │   │   │   │   │       │   │   ├── listCollectionNames.json
│       │   │   │   │   │       │   │   ├── listCollectionObjects-serverErrors.json
│       │   │   │   │   │       │   │   ├── listCollectionObjects.json
│       │   │   │   │   │       │   │   ├── listCollections-serverErrors.json
│       │   │   │   │   │       │   │   ├── listCollections.json
│       │   │   │   │   │       │   │   ├── listDatabaseNames-serverErrors.json
│       │   │   │   │   │       │   │   ├── listDatabaseNames.json
│       │   │   │   │   │       │   │   ├── listDatabaseObjects-serverErrors.json
│       │   │   │   │   │       │   │   ├── listDatabaseObjects.json
│       │   │   │   │   │       │   │   ├── listDatabases-serverErrors.json
│       │   │   │   │   │       │   │   ├── listDatabases.json
│       │   │   │   │   │       │   │   ├── listIndexNames-serverErrors.json
│       │   │   │   │   │       │   │   ├── listIndexNames.json
│       │   │   │   │   │       │   │   ├── listIndexes-serverErrors.json
│       │   │   │   │   │       │   │   ├── listIndexes.json
│       │   │   │   │   │       │   │   └── mapReduce.json
│       │   │   │   │   │       │   ├── retryable_writes/
│       │   │   │   │   │       │   │   ├── bulkWrite-serverErrors.json
│       │   │   │   │   │       │   │   ├── bulkWrite.json
│       │   │   │   │   │       │   │   ├── deleteMany.json
│       │   │   │   │   │       │   │   ├── deleteOne-serverErrors.json
│       │   │   │   │   │       │   │   ├── deleteOne.json
│       │   │   │   │   │       │   │   ├── findOneAndDelete-serverErrors.json
│       │   │   │   │   │       │   │   ├── findOneAndDelete.json
│       │   │   │   │   │       │   │   ├── findOneAndReplace-serverErrors.json
│       │   │   │   │   │       │   │   ├── findOneAndReplace.json
│       │   │   │   │   │       │   │   ├── findOneAndUpdate-serverErrors.json
│       │   │   │   │   │       │   │   ├── findOneAndUpdate.json
│       │   │   │   │   │       │   │   ├── insertMany-serverErrors.json
│       │   │   │   │   │       │   │   ├── insertMany.json
│       │   │   │   │   │       │   │   ├── insertOne-serverErrors.json
│       │   │   │   │   │       │   │   ├── insertOne.json
│       │   │   │   │   │       │   │   ├── replaceOne-serverErrors.json
│       │   │   │   │   │       │   │   ├── replaceOne.json
│       │   │   │   │   │       │   │   ├── retryableErrors.json
│       │   │   │   │   │       │   │   ├── updateMany.json
│       │   │   │   │   │       │   │   ├── updateOne-serverErrors.json
│       │   │   │   │   │       │   │   └── updateOne.json
│       │   │   │   │   │       │   ├── server_discovery_and_monitoring/
│       │   │   │   │   │       │   │   ├── monitoring/
│       │   │   │   │   │       │   │   │   ├── replica_set_with_no_primary.json
│       │   │   │   │   │       │   │   │   ├── replica_set_with_primary.json
│       │   │   │   │   │       │   │   │   ├── replica_set_with_removal.json
│       │   │   │   │   │       │   │   │   ├── required_replica_set.json
│       │   │   │   │   │       │   │   │   └── standalone.json
│       │   │   │   │   │       │   │   ├── rs/
│       │   │   │   │   │       │   │   │   ├── compatible.json
│       │   │   │   │   │       │   │   │   ├── compatible_unknown.json
│       │   │   │   │   │       │   │   │   ├── discover_arbiters.json
│       │   │   │   │   │       │   │   │   ├── discover_passives.json
│       │   │   │   │   │       │   │   │   ├── discover_primary.json
│       │   │   │   │   │       │   │   │   ├── discover_secondary.json
│       │   │   │   │   │       │   │   │   ├── discovery.json
│       │   │   │   │   │       │   │   │   ├── equal_electionids.json
│       │   │   │   │   │       │   │   │   ├── ghost_discovered.json
│       │   │   │   │   │       │   │   │   ├── hosts_differ_from_seeds.json
│       │   │   │   │   │       │   │   │   ├── incompatible_arbiter.json
│       │   │   │   │   │       │   │   │   ├── incompatible_ghost.json
│       │   │   │   │   │       │   │   │   ├── incompatible_other.json
│       │   │   │   │   │       │   │   │   ├── ls_timeout.json
│       │   │   │   │   │       │   │   │   ├── member_reconfig.json
│       │   │   │   │   │       │   │   │   ├── member_standalone.json
│       │   │   │   │   │       │   │   │   ├── new_primary.json
│       │   │   │   │   │       │   │   │   ├── new_primary_new_electionid.json
│       │   │   │   │   │       │   │   │   ├── new_primary_new_setversion.json
│       │   │   │   │   │       │   │   │   ├── new_primary_wrong_set_name.json
│       │   │   │   │   │       │   │   │   ├── non_rs_member.json
│       │   │   │   │   │       │   │   │   ├── normalize_case.json
│       │   │   │   │   │       │   │   │   ├── normalize_case_me.json
│       │   │   │   │   │       │   │   │   ├── null_election_id.json
│       │   │   │   │   │       │   │   │   ├── primary_becomes_ghost.json
│       │   │   │   │   │       │   │   │   ├── primary_becomes_mongos.json
│       │   │   │   │   │       │   │   │   ├── primary_becomes_standalone.json
│       │   │   │   │   │       │   │   │   ├── primary_changes_set_name.json
│       │   │   │   │   │       │   │   │   ├── primary_disconnect.json
│       │   │   │   │   │       │   │   │   ├── primary_disconnect_electionid.json
│       │   │   │   │   │       │   │   │   ├── primary_disconnect_setversion.json
│       │   │   │   │   │       │   │   │   ├── primary_hint_from_secondary_with_mismatched_me.json
│       │   │   │   │   │       │   │   │   ├── primary_mismatched_me.json
│       │   │   │   │   │       │   │   │   ├── primary_reports_new_member.json
│       │   │   │   │   │       │   │   │   ├── primary_to_no_primary_mismatched_me.json
│       │   │   │   │   │       │   │   │   ├── primary_wrong_set_name.json
│       │   │   │   │   │       │   │   │   ├── response_from_removed.json
│       │   │   │   │   │       │   │   │   ├── rsother_discovered.json
│       │   │   │   │   │       │   │   │   ├── sec_not_auth.json
│       │   │   │   │   │       │   │   │   ├── secondary_ignore_ok_0.json
│       │   │   │   │   │       │   │   │   ├── secondary_mismatched_me.json
│       │   │   │   │   │       │   │   │   ├── secondary_wrong_set_name.json
│       │   │   │   │   │       │   │   │   ├── secondary_wrong_set_name_with_primary.json
│       │   │   │   │   │       │   │   │   ├── setversion_without_electionid.json
│       │   │   │   │   │       │   │   │   ├── stepdown_change_set_name.json
│       │   │   │   │   │       │   │   │   ├── too_new.json
│       │   │   │   │   │       │   │   │   ├── too_old.json
│       │   │   │   │   │       │   │   │   ├── unexpected_mongos.json
│       │   │   │   │   │       │   │   │   ├── use_setversion_without_electionid.json
│       │   │   │   │   │       │   │   │   └── wrong_set_name.json
│       │   │   │   │   │       │   │   ├── sharded/
│       │   │   │   │   │       │   │   │   ├── compatible.json
│       │   │   │   │   │       │   │   │   ├── ls_timeout_mongos.json
│       │   │   │   │   │       │   │   │   ├── mongos_disconnect.json
│       │   │   │   │   │       │   │   │   ├── multiple_mongoses.json
│       │   │   │   │   │       │   │   │   ├── non_mongos_removed.json
│       │   │   │   │   │       │   │   │   ├── normalize_uri_case.json
│       │   │   │   │   │       │   │   │   ├── too_new.json
│       │   │   │   │   │       │   │   │   └── too_old.json
│       │   │   │   │   │       │   │   ├── single/
│       │   │   │   │   │       │   │   │   ├── compatible.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_external_ip.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_mongos.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_rsarbiter.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_rsprimary.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_rssecondary.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_slave.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_standalone.json
│       │   │   │   │   │       │   │   │   ├── ls_timeout_standalone.json
│       │   │   │   │   │       │   │   │   ├── not_ok_response.json
│       │   │   │   │   │       │   │   │   ├── standalone_removed.json
│       │   │   │   │   │       │   │   │   ├── too_new.json
│       │   │   │   │   │       │   │   │   ├── too_old.json
│       │   │   │   │   │       │   │   │   └── unavailable_seed.json
│       │   │   │   │   │       │   │   └── supplemental/
│       │   │   │   │   │       │   │       ├── discover_rs_name.json
│       │   │   │   │   │       │   │       ├── discover_rs_name_from_primary.json
│       │   │   │   │   │       │   │       └── discover_rs_name_from_secondary.json
│       │   │   │   │   │       │   ├── server_selection/
│       │   │   │   │   │       │   │   ├── rtt/
│       │   │   │   │   │       │   │   │   ├── first_value.json
│       │   │   │   │   │       │   │   │   ├── first_value_zero.json
│       │   │   │   │   │       │   │   │   ├── value_test_1.json
│       │   │   │   │   │       │   │   │   ├── value_test_2.json
│       │   │   │   │   │       │   │   │   ├── value_test_3.json
│       │   │   │   │   │       │   │   │   ├── value_test_4.json
│       │   │   │   │   │       │   │   │   └── value_test_5.json
│       │   │   │   │   │       │   │   └── server_selection/
│       │   │   │   │   │       │   │       ├── ReplicaSetNoPrimary/
│       │   │   │   │   │       │   │       │   ├── read/
│       │   │   │   │   │       │   │       │   │   ├── Nearest.json
│       │   │   │   │   │       │   │       │   │   ├── Nearest_multiple.json
│       │   │   │   │   │       │   │       │   │   ├── Nearest_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── PossiblePrimary.json
│       │   │   │   │   │       │   │       │   │   ├── PossiblePrimaryNearest.json
│       │   │   │   │   │       │   │       │   │   ├── Primary.json
│       │   │   │   │   │       │   │       │   │   ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │       │   │   ├── PrimaryPreferred_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── Secondary.json
│       │   │   │   │   │       │   │       │   │   ├── SecondaryPreferred.json
│       │   │   │   │   │       │   │       │   │   ├── SecondaryPreferred_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── Secondary_multi_tags.json
│       │   │   │   │   │       │   │       │   │   ├── Secondary_multi_tags2.json
│       │   │   │   │   │       │   │       │   │   └── Secondary_non_matching.json
│       │   │   │   │   │       │   │       │   └── write/
│       │   │   │   │   │       │   │       │       └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       ├── ReplicaSetWithPrimary/
│       │   │   │   │   │       │   │       │   ├── read/
│       │   │   │   │   │       │   │       │   │   ├── Nearest.json
│       │   │   │   │   │       │   │       │   │   ├── Nearest_multiple.json
│       │   │   │   │   │       │   │       │   │   ├── Nearest_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── Primary.json
│       │   │   │   │   │       │   │       │   │   ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │       │   │   ├── PrimaryPreferred_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── Secondary.json
│       │   │   │   │   │       │   │       │   │   ├── SecondaryPreferred.json
│       │   │   │   │   │       │   │       │   │   ├── SecondaryPreferred_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── SecondaryPreferred_tags.json
│       │   │   │   │   │       │   │       │   │   └── Secondary_non_matching.json
│       │   │   │   │   │       │   │       │   └── write/
│       │   │   │   │   │       │   │       │       └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       ├── Sharded/
│       │   │   │   │   │       │   │       │   ├── read/
│       │   │   │   │   │       │   │       │   │   ├── Nearest.json
│       │   │   │   │   │       │   │       │   │   ├── Primary.json
│       │   │   │   │   │       │   │       │   │   ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │       │   │   ├── Secondary.json
│       │   │   │   │   │       │   │       │   │   └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       │   └── write/
│       │   │   │   │   │       │   │       │       ├── Nearest.json
│       │   │   │   │   │       │   │       │       ├── Primary.json
│       │   │   │   │   │       │   │       │       ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │       │       ├── Secondary.json
│       │   │   │   │   │       │   │       │       └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       ├── Single/
│       │   │   │   │   │       │   │       │   ├── read/
│       │   │   │   │   │       │   │       │   │   └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       │   └── write/
│       │   │   │   │   │       │   │       │       └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       └── Unknown/
│       │   │   │   │   │       │   │           ├── read/
│       │   │   │   │   │       │   │           │   └── SecondaryPreferred.json
│       │   │   │   │   │       │   │           └── write/
│       │   │   │   │   │       │   │               └── SecondaryPreferred.json
│       │   │   │   │   │       │   ├── sessions/
│       │   │   │   │   │       │   │   └── dirty-session-errors.json
│       │   │   │   │   │       │   ├── transactions/
│       │   │   │   │   │       │   │   ├── abort.json
│       │   │   │   │   │       │   │   ├── bulk.json
│       │   │   │   │   │       │   │   ├── causal-consistency.json
│       │   │   │   │   │       │   │   ├── commit.json
│       │   │   │   │   │       │   │   ├── count.json
│       │   │   │   │   │       │   │   ├── delete.json
│       │   │   │   │   │       │   │   ├── error-labels.json
│       │   │   │   │   │       │   │   ├── errors.json
│       │   │   │   │   │       │   │   ├── findOneAndDelete.json
│       │   │   │   │   │       │   │   ├── findOneAndReplace.json
│       │   │   │   │   │       │   │   ├── findOneAndUpdate.json
│       │   │   │   │   │       │   │   ├── insert.json
│       │   │   │   │   │       │   │   ├── isolation.json
│       │   │   │   │   │       │   │   ├── mongos-pin-auto.json
│       │   │   │   │   │       │   │   ├── mongos-recovery-token.json
│       │   │   │   │   │       │   │   ├── opts.json
│       │   │   │   │   │       │   │   ├── pin-mongos.json
│       │   │   │   │   │       │   │   ├── read-concern.json
│       │   │   │   │   │       │   │   ├── read-pref.json
│       │   │   │   │   │       │   │   ├── reads.json
│       │   │   │   │   │       │   │   ├── retryable-abort.json
│       │   │   │   │   │       │   │   ├── retryable-commit.json
│       │   │   │   │   │       │   │   ├── retryable-writes.json
│       │   │   │   │   │       │   │   ├── run-command.json
│       │   │   │   │   │       │   │   ├── transaction-options.json
│       │   │   │   │   │       │   │   ├── update.json
│       │   │   │   │   │       │   │   └── write-concern.json
│       │   │   │   │   │       │   ├── uri-options/
│       │   │   │   │   │       │   │   ├── README
│       │   │   │   │   │       │   │   ├── auth-options.json
│       │   │   │   │   │       │   │   ├── compression-options.json
│       │   │   │   │   │       │   │   ├── concern-options.json
│       │   │   │   │   │       │   │   ├── connection-options.json
│       │   │   │   │   │       │   │   ├── connection-pool-options.json
│       │   │   │   │   │       │   │   ├── read-preference-options.json
│       │   │   │   │   │       │   │   ├── single-threaded-options.json
│       │   │   │   │   │       │   │   └── tls-options.json
│       │   │   │   │   │       │   └── with_transaction/
│       │   │   │   │   │       │       ├── callback-aborts.json
│       │   │   │   │   │       │       ├── callback-commits.json
│       │   │   │   │   │       │       ├── callback-retry.json
│       │   │   │   │   │       │       ├── commit-retry.json
│       │   │   │   │   │       │       ├── commit-transienttransactionerror-4.2.json
│       │   │   │   │   │       │       ├── commit-transienttransactionerror.json
│       │   │   │   │   │       │       ├── commit-writeconcernerror.json
│       │   │   │   │   │       │       ├── commit.json
│       │   │   │   │   │       │       └── transaction-options.json
│       │   │   │   │   │       ├── json-test-monitoring.c
│       │   │   │   │   │       ├── json-test-monitoring.h
│       │   │   │   │   │       ├── json-test-operations.c
│       │   │   │   │   │       ├── json-test-operations.h
│       │   │   │   │   │       ├── json-test.c
│       │   │   │   │   │       ├── json-test.h
│       │   │   │   │   │       ├── mock_server/
│       │   │   │   │   │       │   ├── future-functions.c
│       │   │   │   │   │       │   ├── future-functions.h
│       │   │   │   │   │       │   ├── future-value.c
│       │   │   │   │   │       │   ├── future-value.h
│       │   │   │   │   │       │   ├── future.c
│       │   │   │   │   │       │   ├── future.h
│       │   │   │   │   │       │   ├── mock-rs.c
│       │   │   │   │   │       │   ├── mock-rs.h
│       │   │   │   │   │       │   ├── mock-server.c
│       │   │   │   │   │       │   ├── mock-server.h
│       │   │   │   │   │       │   ├── request.c
│       │   │   │   │   │       │   ├── request.h
│       │   │   │   │   │       │   ├── sync-queue.c
│       │   │   │   │   │       │   └── sync-queue.h
│       │   │   │   │   │       ├── release_files/
│       │   │   │   │   │       │   ├── empty-file.txt
│       │   │   │   │   │       │   ├── example-etc-fedora-release.txt
│       │   │   │   │   │       │   ├── example-etc-os-release-ubuntu1604.txt
│       │   │   │   │   │       │   ├── example-etc-os-release.txt
│       │   │   │   │   │       │   ├── example-etc-xyz-release-no-delimiter.txt
│       │   │   │   │   │       │   ├── example-key-value-file.txt
│       │   │   │   │   │       │   ├── example-lsb-file-with-super-long-line.txt
│       │   │   │   │   │       │   └── example-lsb-file.txt
│       │   │   │   │   │       ├── ssl-test.c
│       │   │   │   │   │       ├── ssl-test.h
│       │   │   │   │   │       ├── test-conveniences.c
│       │   │   │   │   │       ├── test-conveniences.h
│       │   │   │   │   │       ├── test-happy-eyeballs.c
│       │   │   │   │   │       ├── test-libmongoc.c
│       │   │   │   │   │       ├── test-libmongoc.h
│       │   │   │   │   │       ├── test-mongoc-aggregate.c
│       │   │   │   │   │       ├── test-mongoc-array.c
│       │   │   │   │   │       ├── test-mongoc-async.c
│       │   │   │   │   │       ├── test-mongoc-buffer.c
│       │   │   │   │   │       ├── test-mongoc-bulk.c
│       │   │   │   │   │       ├── test-mongoc-change-stream.c
│       │   │   │   │   │       ├── test-mongoc-client-pool.c
│       │   │   │   │   │       ├── test-mongoc-client-session.c
│       │   │   │   │   │       ├── test-mongoc-client-side-encryption.c
│       │   │   │   │   │       ├── test-mongoc-client.c
│       │   │   │   │   │       ├── test-mongoc-cluster.c
│       │   │   │   │   │       ├── test-mongoc-collection-find-with-opts.c
│       │   │   │   │   │       ├── test-mongoc-collection-find.c
│       │   │   │   │   │       ├── test-mongoc-collection.c
│       │   │   │   │   │       ├── test-mongoc-command-monitoring.c
│       │   │   │   │   │       ├── test-mongoc-connection-uri.c
│       │   │   │   │   │       ├── test-mongoc-counters.c
│       │   │   │   │   │       ├── test-mongoc-crud.c
│       │   │   │   │   │       ├── test-mongoc-cursor.c
│       │   │   │   │   │       ├── test-mongoc-cyrus.c
│       │   │   │   │   │       ├── test-mongoc-database.c
│       │   │   │   │   │       ├── test-mongoc-dns.c
│       │   │   │   │   │       ├── test-mongoc-error.c
│       │   │   │   │   │       ├── test-mongoc-exhaust.c
│       │   │   │   │   │       ├── test-mongoc-find-and-modify.c
│       │   │   │   │   │       ├── test-mongoc-gridfs-bucket.c
│       │   │   │   │   │       ├── test-mongoc-gridfs-file-page.c
│       │   │   │   │   │       ├── test-mongoc-gridfs.c
│       │   │   │   │   │       ├── test-mongoc-gssapi.c
│       │   │   │   │   │       ├── test-mongoc-handshake.c
│       │   │   │   │   │       ├── test-mongoc-linux-distro-scanner.c
│       │   │   │   │   │       ├── test-mongoc-list.c
│       │   │   │   │   │       ├── test-mongoc-log.c
│       │   │   │   │   │       ├── test-mongoc-matcher.c
│       │   │   │   │   │       ├── test-mongoc-max-staleness.c
│       │   │   │   │   │       ├── test-mongoc-mongos-pinning.c
│       │   │   │   │   │       ├── test-mongoc-opts.c
│       │   │   │   │   │       ├── test-mongoc-primary-stepdown.c
│       │   │   │   │   │       ├── test-mongoc-queue.c
│       │   │   │   │   │       ├── test-mongoc-read-concern.c
│       │   │   │   │   │       ├── test-mongoc-read-prefs.c
│       │   │   │   │   │       ├── test-mongoc-read-write-concern.c
│       │   │   │   │   │       ├── test-mongoc-retryable-reads.c
│       │   │   │   │   │       ├── test-mongoc-retryable-writes.c
│       │   │   │   │   │       ├── test-mongoc-rpc.c
│       │   │   │   │   │       ├── test-mongoc-sample-commands.c
│       │   │   │   │   │       ├── test-mongoc-scram.c
│       │   │   │   │   │       ├── test-mongoc-sdam-monitoring.c
│       │   │   │   │   │       ├── test-mongoc-sdam.c
│       │   │   │   │   │       ├── test-mongoc-server-selection-errors.c
│       │   │   │   │   │       ├── test-mongoc-server-selection.c
│       │   │   │   │   │       ├── test-mongoc-set.c
│       │   │   │   │   │       ├── test-mongoc-socket.c
│       │   │   │   │   │       ├── test-mongoc-stream-tls-error.c
│       │   │   │   │   │       ├── test-mongoc-stream-tls.c
│       │   │   │   │   │       ├── test-mongoc-stream.c
│       │   │   │   │   │       ├── test-mongoc-thread.c
│       │   │   │   │   │       ├── test-mongoc-topology-description.c
│       │   │   │   │   │       ├── test-mongoc-topology-reconcile.c
│       │   │   │   │   │       ├── test-mongoc-topology-scanner.c
│       │   │   │   │   │       ├── test-mongoc-topology.c
│       │   │   │   │   │       ├── test-mongoc-transactions.c
│       │   │   │   │   │       ├── test-mongoc-uri.c
│       │   │   │   │   │       ├── test-mongoc-usleep.c
│       │   │   │   │   │       ├── test-mongoc-util.c
│       │   │   │   │   │       ├── test-mongoc-version.c
│       │   │   │   │   │       ├── test-mongoc-with-transaction.c
│       │   │   │   │   │       ├── test-mongoc-write-commands.c
│       │   │   │   │   │       ├── test-mongoc-write-concern.c
│       │   │   │   │   │       ├── test-mongoc-x509.c
│       │   │   │   │   │       └── x509gen/
│       │   │   │   │   │           ├── 82e9b7a6.0
│       │   │   │   │   │           ├── altname.pem
│       │   │   │   │   │           ├── ca.pem
│       │   │   │   │   │           ├── client-private.pem
│       │   │   │   │   │           ├── client-public.pem
│       │   │   │   │   │           ├── client.pem
│       │   │   │   │   │           ├── commonName.pem
│       │   │   │   │   │           ├── crl.pem
│       │   │   │   │   │           ├── expired.pem
│       │   │   │   │   │           ├── legacy-ca.crt
│       │   │   │   │   │           ├── legacy-x509.pem
│       │   │   │   │   │           ├── password_protected.pem
│       │   │   │   │   │           ├── server.pem
│       │   │   │   │   │           └── wild.pem
│       │   │   │   │   ├── tools/
│       │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   └── mongoc-stat.c
│       │   │   │   │   └── zlib-1.2.11/
│       │   │   │   │       ├── .gitignore
│       │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │       ├── FAQ
│       │   │   │   │       ├── INDEX
│       │   │   │   │       ├── Makefile.am
│       │   │   │   │       ├── adler32.c
│       │   │   │   │       ├── amiga/
│       │   │   │   │       │   ├── Makefile.pup
│       │   │   │   │       │   └── Makefile.sas
│       │   │   │   │       ├── compress.c
│       │   │   │   │       ├── contrib/
│       │   │   │   │       │   ├── README.contrib
│       │   │   │   │       │   ├── ada/
│       │   │   │   │       │   │   ├── buffer_demo.adb
│       │   │   │   │       │   │   ├── mtest.adb
│       │   │   │   │       │   │   ├── read.adb
│       │   │   │   │       │   │   ├── readme.txt
│       │   │   │   │       │   │   ├── test.adb
│       │   │   │   │       │   │   ├── zlib-streams.adb
│       │   │   │   │       │   │   ├── zlib-streams.ads
│       │   │   │   │       │   │   ├── zlib-thin.adb
│       │   │   │   │       │   │   ├── zlib-thin.ads
│       │   │   │   │       │   │   ├── zlib.adb
│       │   │   │   │       │   │   ├── zlib.ads
│       │   │   │   │       │   │   └── zlib.gpr
│       │   │   │   │       │   ├── amd64/
│       │   │   │   │       │   │   └── amd64-match.S
│       │   │   │   │       │   ├── asm686/
│       │   │   │   │       │   │   ├── README.686
│       │   │   │   │       │   │   └── match.S
│       │   │   │   │       │   ├── blast/
│       │   │   │   │       │   │   ├── blast.c
│       │   │   │   │       │   │   ├── blast.h
│       │   │   │   │       │   │   ├── test.pk
│       │   │   │   │       │   │   └── test.txt
│       │   │   │   │       │   ├── delphi/
│       │   │   │   │       │   │   ├── ZLib.pas
│       │   │   │   │       │   │   ├── ZLibConst.pas
│       │   │   │   │       │   │   ├── readme.txt
│       │   │   │   │       │   │   └── zlibd32.mak
│       │   │   │   │       │   ├── dotzlib/
│       │   │   │   │       │   │   ├── DotZLib/
│       │   │   │   │       │   │   │   ├── AssemblyInfo.cs
│       │   │   │   │       │   │   │   ├── ChecksumImpl.cs
│       │   │   │   │       │   │   │   ├── CircularBuffer.cs
│       │   │   │   │       │   │   │   ├── CodecBase.cs
│       │   │   │   │       │   │   │   ├── Deflater.cs
│       │   │   │   │       │   │   │   ├── DotZLib.cs
│       │   │   │   │       │   │   │   ├── DotZLib.csproj
│       │   │   │   │       │   │   │   ├── GZipStream.cs
│       │   │   │   │       │   │   │   ├── Inflater.cs
│       │   │   │   │       │   │   │   └── UnitTests.cs
│       │   │   │   │       │   │   ├── DotZLib.build
│       │   │   │   │       │   │   ├── DotZLib.chm
│       │   │   │   │       │   │   ├── LICENSE_1_0.txt
│       │   │   │   │       │   │   └── readme.txt
│       │   │   │   │       │   ├── gcc_gvmat64/
│       │   │   │   │       │   │   └── gvmat64.S
│       │   │   │   │       │   ├── infback9/
│       │   │   │   │       │   │   ├── infback9.c
│       │   │   │   │       │   │   ├── infback9.h
│       │   │   │   │       │   │   ├── inffix9.h
│       │   │   │   │       │   │   ├── inflate9.h
│       │   │   │   │       │   │   ├── inftree9.c
│       │   │   │   │       │   │   └── inftree9.h
│       │   │   │   │       │   ├── inflate86/
│       │   │   │   │       │   │   ├── inffas86.c
│       │   │   │   │       │   │   └── inffast.S
│       │   │   │   │       │   ├── iostream/
│       │   │   │   │       │   │   ├── test.cpp
│       │   │   │   │       │   │   ├── zfstream.cpp
│       │   │   │   │       │   │   └── zfstream.h
│       │   │   │   │       │   ├── iostream2/
│       │   │   │   │       │   │   ├── zstream.h
│       │   │   │   │       │   │   └── zstream_test.cpp
│       │   │   │   │       │   ├── iostream3/
│       │   │   │   │       │   │   ├── TODO
│       │   │   │   │       │   │   ├── test.cc
│       │   │   │   │       │   │   ├── zfstream.cc
│       │   │   │   │       │   │   └── zfstream.h
│       │   │   │   │       │   ├── masmx64/
│       │   │   │   │       │   │   ├── bld_ml64.bat
│       │   │   │   │       │   │   ├── gvmat64.asm
│       │   │   │   │       │   │   ├── inffas8664.c
│       │   │   │   │       │   │   ├── inffasx64.asm
│       │   │   │   │       │   │   └── readme.txt
│       │   │   │   │       │   ├── masmx86/
│       │   │   │   │       │   │   ├── bld_ml32.bat
│       │   │   │   │       │   │   ├── inffas32.asm
│       │   │   │   │       │   │   ├── match686.asm
│       │   │   │   │       │   │   └── readme.txt
│       │   │   │   │       │   ├── minizip/
│       │   │   │   │       │   │   ├── Makefile.am
│       │   │   │   │       │   │   ├── MiniZip64_Changes.txt
│       │   │   │   │       │   │   ├── MiniZip64_info.txt
│       │   │   │   │       │   │   ├── configure.ac
│       │   │   │   │       │   │   ├── crypt.h
│       │   │   │   │       │   │   ├── ioapi.c
│       │   │   │   │       │   │   ├── ioapi.h
│       │   │   │   │       │   │   ├── iowin32.c
│       │   │   │   │       │   │   ├── iowin32.h
│       │   │   │   │       │   │   ├── make_vms.com
│       │   │   │   │       │   │   ├── miniunz.c
│       │   │   │   │       │   │   ├── miniunzip.1
│       │   │   │   │       │   │   ├── minizip.1
│       │   │   │   │       │   │   ├── minizip.c
│       │   │   │   │       │   │   ├── minizip.pc.in
│       │   │   │   │       │   │   ├── mztools.c
│       │   │   │   │       │   │   ├── mztools.h
│       │   │   │   │       │   │   ├── unzip.c
│       │   │   │   │       │   │   ├── unzip.h
│       │   │   │   │       │   │   ├── zip.c
│       │   │   │   │       │   │   └── zip.h
│       │   │   │   │       │   ├── pascal/
│       │   │   │   │       │   │   ├── example.pas
│       │   │   │   │       │   │   ├── readme.txt
│       │   │   │   │       │   │   ├── zlibd32.mak
│       │   │   │   │       │   │   └── zlibpas.pas
│       │   │   │   │       │   ├── puff/
│       │   │   │   │       │   │   ├── puff.c
│       │   │   │   │       │   │   ├── puff.h
│       │   │   │   │       │   │   ├── pufftest.c
│       │   │   │   │       │   │   └── zeros.raw
│       │   │   │   │       │   ├── testzlib/
│       │   │   │   │       │   │   ├── testzlib.c
│       │   │   │   │       │   │   └── testzlib.txt
│       │   │   │   │       │   ├── untgz/
│       │   │   │   │       │   │   ├── Makefile.msc
│       │   │   │   │       │   │   └── untgz.c
│       │   │   │   │       │   └── vstudio/
│       │   │   │   │       │       ├── readme.txt
│       │   │   │   │       │       ├── vc10/
│       │   │   │   │       │       │   ├── zlib.rc
│       │   │   │   │       │       │   └── zlibvc.def
│       │   │   │   │       │       ├── vc11/
│       │   │   │   │       │       │   ├── zlib.rc
│       │   │   │   │       │       │   └── zlibvc.def
│       │   │   │   │       │       ├── vc12/
│       │   │   │   │       │       │   ├── zlib.rc
│       │   │   │   │       │       │   └── zlibvc.def
│       │   │   │   │       │       ├── vc14/
│       │   │   │   │       │       │   ├── zlib.rc
│       │   │   │   │       │       │   └── zlibvc.def
│       │   │   │   │       │       └── vc9/
│       │   │   │   │       │           ├── miniunz.vcproj
│       │   │   │   │       │           ├── minizip.vcproj
│       │   │   │   │       │           ├── testzlib.vcproj
│       │   │   │   │       │           ├── testzlibdll.vcproj
│       │   │   │   │       │           ├── zlib.rc
│       │   │   │   │       │           ├── zlibstat.vcproj
│       │   │   │   │       │           ├── zlibvc.def
│       │   │   │   │       │           └── zlibvc.vcproj
│       │   │   │   │       ├── crc32.c
│       │   │   │   │       ├── crc32.h
│       │   │   │   │       ├── deflate.c
│       │   │   │   │       ├── deflate.h
│       │   │   │   │       ├── doc/
│       │   │   │   │       │   ├── algorithm.txt
│       │   │   │   │       │   ├── rfc1950.txt
│       │   │   │   │       │   ├── rfc1951.txt
│       │   │   │   │       │   ├── rfc1952.txt
│       │   │   │   │       │   └── txtvsbin.txt
│       │   │   │   │       ├── examples/
│       │   │   │   │       │   ├── README.examples
│       │   │   │   │       │   ├── enough.c
│       │   │   │   │       │   ├── fitblk.c
│       │   │   │   │       │   ├── gun.c
│       │   │   │   │       │   ├── gzappend.c
│       │   │   │   │       │   ├── gzjoin.c
│       │   │   │   │       │   ├── gzlog.c
│       │   │   │   │       │   ├── gzlog.h
│       │   │   │   │       │   ├── zlib_how.html
│       │   │   │   │       │   ├── zpipe.c
│       │   │   │   │       │   └── zran.c
│       │   │   │   │       ├── gzclose.c
│       │   │   │   │       ├── gzguts.h
│       │   │   │   │       ├── gzlib.c
│       │   │   │   │       ├── gzread.c
│       │   │   │   │       ├── gzwrite.c
│       │   │   │   │       ├── infback.c
│       │   │   │   │       ├── inffast.c
│       │   │   │   │       ├── inffast.h
│       │   │   │   │       ├── inffixed.h
│       │   │   │   │       ├── inflate.c
│       │   │   │   │       ├── inflate.h
│       │   │   │   │       ├── inftrees.c
│       │   │   │   │       ├── inftrees.h
│       │   │   │   │       ├── make_vms.com
│       │   │   │   │       ├── msdos/
│       │   │   │   │       │   ├── Makefile.bor
│       │   │   │   │       │   ├── Makefile.dj2
│       │   │   │   │       │   ├── Makefile.emx
│       │   │   │   │       │   ├── Makefile.msc
│       │   │   │   │       │   └── Makefile.tc
│       │   │   │   │       ├── old/
│       │   │   │   │       │   ├── Makefile.emx
│       │   │   │   │       │   ├── Makefile.riscos
│       │   │   │   │       │   ├── descrip.mms
│       │   │   │   │       │   ├── os2/
│       │   │   │   │       │   │   ├── Makefile.os2
│       │   │   │   │       │   │   └── zlib.def
│       │   │   │   │       │   └── visual-basic.txt
│       │   │   │   │       ├── os400/
│       │   │   │   │       │   ├── README400
│       │   │   │   │       │   ├── bndsrc
│       │   │   │   │       │   ├── make.sh
│       │   │   │   │       │   └── zlib.inc
│       │   │   │   │       ├── qnx/
│       │   │   │   │       │   └── package.qpg
│       │   │   │   │       ├── test/
│       │   │   │   │       │   ├── example.c
│       │   │   │   │       │   ├── infcover.c
│       │   │   │   │       │   └── minigzip.c
│       │   │   │   │       ├── treebuild.xml
│       │   │   │   │       ├── trees.c
│       │   │   │   │       ├── trees.h
│       │   │   │   │       ├── uncompr.c
│       │   │   │   │       ├── watcom/
│       │   │   │   │       │   ├── watcom_f.mak
│       │   │   │   │       │   └── watcom_l.mak
│       │   │   │   │       ├── win32/
│       │   │   │   │       │   ├── DLL_FAQ.txt
│       │   │   │   │       │   ├── Makefile.bor
│       │   │   │   │       │   ├── Makefile.gcc
│       │   │   │   │       │   ├── Makefile.msc
│       │   │   │   │       │   ├── README-WIN32.txt
│       │   │   │   │       │   ├── VisualC.txt
│       │   │   │   │       │   ├── zlib.def
│       │   │   │   │       │   └── zlib1.rc
│       │   │   │   │       ├── zconf.h.cmakein
│       │   │   │   │       ├── zconf.h.in
│       │   │   │   │       ├── zlib.3
│       │   │   │   │       ├── zlib.h
│       │   │   │   │       ├── zlib.pc.cmakein
│       

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/c-cpp.yml
================================================
name: C/C++ CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: readline
      run: 'sudo apt install libreadline-dev'
    - name: cd core
      run: "cd core && mkdir build"
    - name: cd build
      run: "cd core/build && cmake .."
    - name: cmake --build
      run: "cd core && cmake --build build"


================================================
FILE: .gitignore
================================================
# Prerequisites
*.d

# Object files
*.o
*.ko
*.obj
*.elf

# Linker output
*.ilk
*.map
*.exp

# Precompiled Headers
*.gch
*.pch

# Libraries
*.lib
*.a
*.la
*.lo

# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib

# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex

# Debug files
*.dSYM/
*.su
*.idb
*.pdb

# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf

/core/bin/server/logs
/core/build
.vscode
/core/src/lib/3rd/mongo-c-driver/VERSION_CURRENT
/core/libs/Debug


================================================
FILE: LICENSE
================================================
                    GNU AFFERO GENERAL PUBLIC LICENSE
                       Version 3, 19 November 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.

  A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate.  Many developers of free software are heartened and
encouraged by the resulting cooperation.  However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.

  The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community.  It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server.  Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.

  An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals.  This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU Affero General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Remote Network Interaction; Use with the GNU General Public License.

  Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software.  This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time.  Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source.  For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code.  There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.


================================================
FILE: README.md
================================================
# luacluster

[![C/C++ CI](https://github.com/surparallel/luacluter/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/surparallel/luacluter/actions/workflows/c-cpp.yml)

## 概要

luacluster分布式游戏服务器框架。特色是实现了万人同屏,实现了无缝大地图,用户开发方式为lua的rpc调用模式,已经接入mongodb。近期计划是写技术白皮书。QQ群:927073440。

Lucluster distributed game server framework. The feature is to achieve the same screen for ten thousand people and a big seamless world. The user development mode is the rpc call mode of lua. Mongodb is already available. The immediate plan is to write a technical white paper.

## 1. BUILDING AND INSTALLATION

### CMake (Windows)

Install CMake: <https://www.cmake.org>

``` cmd
$ md build && cd build
$ cmake -G "Visual Studio 10" ..   # Or use any generator you want to use. Run cmake --help for a list
$ cmake --build . --config Release # Or "start libevent.sln" and build with menu in Visual Studio.
```

See [Documentation/Building#Building on Windows](/Documentation/Building.md#building-on-windows) for more information

### CMake (Ubuntu 18,20)

``` cmd
$ apt-get install -y build-essential libreadline-dev
$ cd core && mkdir build
$ cd core/build && cmake ..     # Default to ubuntu Makefiles.
$ cd core && cmake --build build
```

### CMake  (optional)

``` cmd
$ cmake -DLUA_USE_LUAJIT=ON #使用luajit
```

## 2. START RUNING (Windows)

### 服务器

启动流程:redis.bat, luacluter(_d).exe, bots.bat

在bots.bat中修改要启动的机器人数量

### 机器人

``` cmd
# --btcp的参数为连接服务器的 Ip port 总数量
$ luacluter_d.exe --bots --noudp --inside --btcp 127.0.0.1 9577 500 #服务器ip, 端口,总数量

# --btcp2的参数为连接服务器的 Ip port 数量 ip数量
$ luacluter_d.exe --bots --noudp --inside --btcp2 127.0.0.1 9577 500 #服务器ip, 端口,数量, ip的数量
```

### 两种模式的配置

服务器的默认配置文件core\res\server\config_defaults.json

#### 压力测试模式

``` cmd
{
  "log_config": {
    "ruleDefault": {

    }
  },
  "base_config": {
    "inside": 1
  },
  "docke_config":{
    "dockerRandomSize":128,#随机线程的数量
    "dockerGlobeSize":8,#全局线程的数量
    "popNodeSize":200000,
    "congestion":4000000
  },
  "tcp":{
    "tcp4":[
      {
      "tcp4BindAddr":"0.0.0.0",#tcp的线程和ip端口
      "tcp4Port":9577
      }, 
      {
      "tcp4BindAddr":"0.0.0.0",
      "tcp4Port":9578
      }, 
      {
      "tcp4BindAddr":"0.0.0.0",
      "tcp4Port":9579
      }, 
      {
      "tcp4BindAddr":"0.0.0.0",
      "tcp4Port":9580
      }, 
      {
      "tcp4BindAddr":"0.0.0.0",
      "tcp4Port":9581
      }, 
      {
      "tcp4BindAddr":"0.0.0.0",
      "tcp4Port":9582
      }, 
      {
      "tcp4BindAddr":"0.0.0.0",
      "tcp4Port":9583
      }, 
      {
      "tcp4BindAddr":"0.0.0.0",
      "tcp4Port":9584
      }, 
      {
      "tcp4BindAddr":"0.0.0.0",
      "tcp4Port":9585
      }, 
      {
      "tcp4BindAddr":"0.0.0.0",
      "tcp4Port":9586
      }
    ]
  }
}
```

#### 单线程调试模式

``` cmd
{
  "log_config": {
    "ruleDefault": {

    }
  },
  "base_config": {
    "inside": 1
  },
  "docke_config":{
    "dockerRandomSize":1,#随机线程的数量
    "dockerGlobeSize":0,#全局线程的数量
    "popNodeSize":200000,
    "congestion":4000000
  },
  "tcp":{
    "tcp4":[
      {
      "tcp4BindAddr":"0.0.0.0",#tcp的线程和ip端口
      "tcp4Port":9577
      }
    ]
  }
}
```

### 数据库存储的测试

在luacluster中使用mongodb

sc.lua全局配置中已经添加了"dbsvr"全局服务对象。

``` lua
sc.cluster.serves = {"space","bigworld","dbsvr"}--集群启动时要启动的服务列表
```

在任意节点控制台输入命令创建一个dbentity对象

``` cmd
#命令new
#参数1:在什么地方创建对象
	DockerCurrent = 0, //当前线程的docker
	DockerRandom,//当前节点的随机ddocker
	NodeInside,//任意内部节点
	NodeOutside,//任意有对外部通信节点
	NodeRandom,//随机节点
	DockerGlobe//放入全局对象池
#参数2:创建对象的名字“dbentity”
#参数3:创建对象的初始化数据格式为json
>new 1 dbentity {}
>New tentity:   18302840717262782469
```

使用call命令调用dbentity对象的fun函数返回dbid。

``` cmd
>call 18302840717262782469 fun
>test entity fun
db      6253f48671099513a0f5165f

#命令call
#参数1:entityid
#参数2:entity的函数,这里为dbentity.lua中的“fun”
#剩余参数:为函数参数,类型为数字,字符串,json。例如call 18302840717262782469 fun2 111 {"a":1} aaa
```

## 3. luacluster白皮书纲要

1. [luacluster组织架构及名词定义](./docs/1.整体架构设计.md)
2. [entity对象的创建,继承,多重继承,多态,健事件。](./docs/2.entity的面向对象.md)
3. luarpc调用及封包结构。
4. 全局对象的创建和全局对象的功能插件
5. bigworld无缝大地图全局对象。
6. sudoku九宫格空间全局对象。
7. space全局对象
8. dbsvr数据存储全局对象
9. 命令以及参数
10. docker的脚本api
11. 如何使用luacluster创建一个MMO游戏


================================================
FILE: core/CMakeLists.txt
================================================
PROJECT(luacluster)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12) 
option ( LUA_USE_LUAJIT "Use luajit" ON)

if (MSVC)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/libs)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/libs)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/bin/server)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/bin/server)
else()

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/libs)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/libs)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin/server)
endif ()

if (APPLE)
   cmake_policy (SET CMP0042 OLD)
endif ()

ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src/lib/common )
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src/lib/3rd/3dmath )
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src/lib/3rd/lua-mongodb )
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src/lib/3rd/libuv EXCLUDE_FROM_ALL )
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src/lib/3rd/openssl EXCLUDE_FROM_ALL )
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src/lib/3rd/hiredis EXCLUDE_FROM_ALL )
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src/lib/3rd/mongo-c-driver EXCLUDE_FROM_ALL )
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src/lib/3rd/luasocket EXCLUDE_FROM_ALL )
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src/lib/3rd/sigar EXCLUDE_FROM_ALL )

if (LUA_USE_LUAJIT)
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src/lib/3rd/luajit EXCLUDE_FROM_ALL )
else ()
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src/lib/3rd/lua/src )
endif ()

AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src/server/src DIR_SRCS)
AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src/server/test DIR_SRCS)
ADD_EXECUTABLE(luacluster ${DIR_SRCS})

set_target_properties(luacluster PROPERTIES DEBUG_POSTFIX "_d")

TARGET_LINK_LIBRARIES(luacluster common )
TARGET_LINK_LIBRARIES(luacluster 3dmath )
TARGET_LINK_LIBRARIES(luacluster uv_a )
TARGET_LINK_LIBRARIES(luacluster crypto)
TARGET_LINK_LIBRARIES(luacluster ssl)
TARGET_LINK_LIBRARIES(luacluster hiredis_static)
TARGET_LINK_LIBRARIES(luacluster lua-mongodb)
TARGET_LINK_LIBRARIES(luacluster bson_static)
TARGET_LINK_LIBRARIES(luacluster mongoc_static)
TARGET_LINK_LIBRARIES(luacluster socket)
TARGET_LINK_LIBRARIES(luacluster mime)
TARGET_LINK_LIBRARIES(luacluster sigar_static)

if ( UNIX )
set(CMAKE_VERBOSE_MAKEFILE ON)
find_path(READLINE_INCLUDE_DIR readline/readline.h)
set_property(TARGET luacluster PROPERTY C_STANDARD 99)
TARGET_LINK_LIBRARIES(luacluster readline)
endif ()

if (LUA_USE_LUAJIT)
TARGET_LINK_LIBRARIES( luacluster liblua)
target_include_directories( luacluster PUBLIC ${PROJECT_SOURCE_DIR}/src/lib/3rd/luajit/src)
target_include_directories( common PUBLIC ${PROJECT_SOURCE_DIR}/src/lib/3rd/luajit/src)
target_include_directories( lua-mongodb PUBLIC ${PROJECT_SOURCE_DIR}/src/lib/3rd/luajit/src)
target_include_directories( socket PUBLIC ${PROJECT_SOURCE_DIR}/src/lib/3rd/luajit/src)
target_include_directories( mime PUBLIC ${PROJECT_SOURCE_DIR}/src/lib/3rd/luajit/src)

target_include_directories( luacluster PUBLIC ${PROJECT_BINARY_DIR}/src/lib/3rd/luajit)
target_include_directories( common PUBLIC ${PROJECT_BINARY_DIR}/src/lib/3rd/luajit)
target_include_directories( lua-mongodb PUBLIC ${PROJECT_BINARY_DIR}/src/lib/3rd/luajit)
target_include_directories( socket PUBLIC ${PROJECT_BINARY_DIR}/src/lib/3rd/luajit)
target_include_directories( mime PUBLIC ${PROJECT_BINARY_DIR}/src/lib/3rd/luajit)
else ()
TARGET_LINK_LIBRARIES( luacluster lua)
target_include_directories( luacluster PUBLIC ${PROJECT_SOURCE_DIR}/src/lib/3rd/lua/src)
target_include_directories( common PUBLIC ${PROJECT_SOURCE_DIR}/src/lib/3rd/lua/src)
target_include_directories( lua-mongodb PUBLIC ${PROJECT_SOURCE_DIR}/src/lib/3rd/lua/src)
target_include_directories( socket PUBLIC ${PROJECT_SOURCE_DIR}/src/lib/3rd/lua/src)
target_include_directories( mime PUBLIC ${PROJECT_SOURCE_DIR}/src/lib/3rd/lua/src)
endif ()


target_include_directories( luacluster PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/common)
target_include_directories( luacluster PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/3rd/3dmath)
target_include_directories( luacluster PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/3rd/libuv/include)
target_include_directories( luacluster PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/3rd/hiredis)
target_include_directories( luacluster PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/3rd/luasocket/src)
target_include_directories( luacluster PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/3rd/lua-mongodb)
target_include_directories( luacluster PRIVATE ${PROJECT_SOURCE_DIR}/src/server/src)
target_include_directories( luacluster PRIVATE ${PROJECT_SOURCE_DIR}/src/server/test)

target_include_directories( common PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/3rd/libuv/include)
target_include_directories( common PRIVATE ${PROJECT_BINARY_DIR}/src/lib/3rd/openssl/include)
target_include_directories( common PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/3rd/hiredis)
target_include_directories( common PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/3rd/sigar/include)

target_include_directories( lua-mongodb PRIVATE ${PROJECT_BINARY_DIR}/src/lib/3rd/mongo-c-driver/src/libbson/src/bson)
target_include_directories( lua-mongodb PRIVATE ${PROJECT_BINARY_DIR}/src/lib/3rd/mongo-c-driver/src/libmongoc/src/mongoc)
target_include_directories( lua-mongodb PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/3rd/mongo-c-driver/src/libbson/src)
target_include_directories( lua-mongodb PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/3rd/mongo-c-driver/src/libmongoc/src)
target_include_directories( lua-mongodb PRIVATE ${PROJECT_SOURCE_DIR}/src/lib/3rd/mongo-c-driver/src/common)
target_compile_definitions(lua-mongodb PRIVATE MONGOC_STATIC BSON_STATIC)


================================================
FILE: core/bin/server/assert_sc.lua
================================================
local sc = {}

return sc

================================================
FILE: core/bin/server/bots.bat
================================================
luacluster_d.exe --bots --noudp --inside --btcp2 127.0.0.1 9577 10 1

================================================
FILE: core/bin/server/bots.sh
================================================
./luacluster --bots --noudp --inside --btcp2 127.0.0.1 9577 500 10


================================================
FILE: core/bin/server/log4j.properties
================================================
log4j.rootLogger=debug, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%d] - %m

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=./log.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=10

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%5p %c [%d] - %m

================================================
FILE: core/bin/server/lua/LuaPanda.lua
================================================
-- Tencent is pleased to support the open source community by making LuaPanda available.
-- Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
-- Licensed under the BSD 3-Clause License (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
-- https://opensource.org/licenses/BSD-3-Clause
-- Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

-- API:
--     LuaPanda.printToVSCode(logStr, printLevel, type)
--         打印日志到VSCode Output下 LuaPanda Debugger 中
--         @printLevel: debug(0)/info(1)/error(2) 这里的日志等级需高于launch.json中配置等级日志才能输出 (可选参数,默认0)
--         @type(可选参数,默认0): 0:VSCode output console  1:VSCode tip  2:VSCode debug console

--     LuaPanda.BP()
--         强制打断点,可以在协程中使用。建议使用以下写法:
--         local ret = LuaPanda and LuaPanda.BP and LuaPanda.BP();
--         如果成功加入断点ret返回true,否则是nil

--     LuaPanda.getInfo()
--         返回获取调试器信息。包括版本号,是否使用lib库,系统是否支持loadstring(load方法)。返回值类型string, 推荐在调试控制台中使用。

--     LuaPanda.testBreakpoint()
--         测试断点,用于分析路径错误导致断点无法停止的情况。测试方法是
--         1. launch.json 中开启 stopOnEntry, 或者在代码中加入LuaPanda.BP()。
--         2. 运行调试器和 lua 进程,当停止在 stopOnEntry 或者 LuaPanda.BP() 时在调试控制台输入 LuaPanda.testBreakpoint()
--         3. 根据提示更新断点后再次输入 LuaPanda.testBreakpoint()。此时系统会输出一些提示,帮助用户分析断点可能无法停止的原因。

--     LuaPanda.doctor()
--         返回对当前环境的诊断信息,提示可能存在的问题。返回值类型string, 推荐在调试控制台中使用。

--     LuaPanda.getBreaks()
--         获取断点信息,推荐在调试控制台中使用。

--     LuaPanda.serializeTable(table)
--         把table序列化为字符串,返回值类型是string。

--     LuaPanda.stopAttach()
--         断开连接,停止attach,本次被调试程序运行过程无法再次进行attach连接。

-- 其他说明:
--     关于真机调试,首次使用真机调试时要注意下方"用户设置项"中的配置
--         1. 确定 attach 开关打开: openAttachMode = true; 这样可以避免先启动手机app之后启动调试器无法连接。
--         2. 把连接时间放长: connectTimeoutSec 设置为 0.5 或者 1。首次尝试真机调试时这个值可以设置大一点,之后再根据自己的网络状况向下调整。
--         调试方法可以参考 github 文档

--用户设置项
local openAttachMode = true;            --是否开启attach模式。attach模式开启后可以在任意时刻启动vscode连接调试。缺点是没有连接调试时也会略降低lua执行效率(会不断进行attach请求)
local attachInterval = 1;               --attach间隔时间(s)
local connectTimeoutSec = 0.005;       --lua进程作为Client时, 连接超时时间, 单位s. 时间过长等待attach时会造成卡顿,时间过短可能无法连接。建议值0.005 - 0.05
local listeningTimeoutSec = 0.5;       -- lua进程作为Server时,连接超时时间, 单位s. 时间过长等待attach时会造成卡顿,时间过短可能无法连接。建议值0.1 - 1
local userDotInRequire = true;         --兼容require中使用 require(a.b) 和 require(a/b) 的形式引用文件夹中的文件,默认无需修改
local traversalUserData = false;        --如果可以的话(取决于userdata原表中的__pairs),展示userdata中的元素。 如果在调试器中展开userdata时有错误,请关闭此项.
local customGetSocketInstance = nil;    --支持用户实现一个自定义调用luasocket的函数,函数返回值必须是一个socket实例。例: function() return require("socket.core").tcp() end;
local consoleLogLevel = 2;           --打印在控制台(print)的日志等级 0 : all/ 1: info/ 2: error.
--用户设置项END

local debuggerVer = "3.2.0";                 --debugger版本号
LuaPanda = {};
local this = LuaPanda;
local tools = {};     --引用的开源工具,包括json解析和table展开工具等
this.tools = tools;
this.curStackId = 0;
--json处理
local json;
--hook状态列表
local hookState = {
    DISCONNECT_HOOK = 0,        --断开连接
    LITE_HOOK = 1,              --全局无断点
    MID_HOOK = 2,               --全局有断点,本文件无断点
    ALL_HOOK = 3,               --本文件有断点
};
--运行状态列表
local runState = {
    DISCONNECT = 0,             --未连接
    WAIT_CMD = 1,               --已连接,等待命令
    STOP_ON_ENTRY = 2,          --初始状态
    RUN = 3,
    STEPOVER = 4,
    STEPIN = 5,
    STEPOUT = 6,
    STEPOVER_STOP = 7,
    STEPIN_STOP = 8,
    STEPOUT_STOP = 9,
    HIT_BREAKPOINT = 10
};

local TCPSplitChar = "|*|";             --json协议分隔符,请不要修改
local MAX_TIMEOUT_SEC = 3600 * 24;   --网络最大超时等待时间
--当前运行状态
local currentRunState;
local currentHookState;
--断点信息
local breaks = {};              --保存断点的数组
this.breaks = breaks;           --供hookLib调用
local recCallbackId = "";
--VSCode端传过来的配置,在VSCode端的launch配置,传过来并赋值
local luaFileExtension = "";    --vscode传过来的脚本后缀
local cwd = "";                 --工作路径
local DebuggerFileName = "";    --Debugger文件名(原始,未经path处理), 函数中会自动获取
local DebuggerToolsName = "";
local lastRunFunction = {};     --上一个执行过的函数。在有些复杂场景下(find,getcomponent)一行会挺两次
local currentCallStack = {};    --获取当前调用堆栈信息
local hitBP = false;            --BP()中的强制断点命中标记
local TempFilePath_luaString = ""; --VSCode端配置的临时文件存放路径
local recordHost;              --记录连接端IP
local recordPort;              --记录连接端口号
local sock;                   --lua socket 文件描述符
local server;                 --server 描述符
local OSType;                --VSCode识别出的系统类型,也可以自行设置。Windows_NT | Linux | Darwin
local clibPath;                 --chook库在VScode端的路径,也可自行设置。
local hookLib;                  --chook库的引用实例
local adapterVer;               --VScode传来的adapter版本号
local truncatedOPath;           --VScode中用户设置的用于截断opath路径的标志,注意这里可以接受lua魔法字符
local distinguishSameNameFile = false;  --是否区分lua同名文件中的断点,在VScode launch.json 中 distinguishSameNameFile 控制
--标记位
local logLevel = 1;             --日志等级all/info/error. 此设置对应的是VSCode端设置的日志等级.
local variableRefIdx = 1;       --变量索引
local variableRefTab = {};      --变量记录table
local lastRunFilePath = "";     --最后执行的文件路径
local pathCaseSensitivity = true;  --路径是否发大小写敏感,这个选项接收VScode设置,请勿在此处更改
local recvMsgQueue = {};        --接收的消息队列
local coroutinePool = setmetatable({}, {__mode = "v"});       --保存用户协程的队列
local winDiskSymbolUpper = false;--设置win下盘符的大小写。以此确保从VSCode中传入的断点路径,cwd和从lua虚拟机获得的文件路径盘符大小写一致
local isNeedB64EncodeStr = false;-- 记录是否使用base64编码字符串
local loadclibErrReason = 'launch.json文件的配置项useCHook被设置为false.';
local OSTypeErrTip = "";
local pathErrTip = ""
local winDiskSymbolTip = "";
local isAbsolutePath = false;
local stopOnEntry;         --用户在VSCode端设置的是否打开stopOnEntry
local userSetUseClib;    --用户在VSCode端设置的是否是用clib库
local autoPathMode = false;
local autoExt;           --调试器启动时自动获取到的后缀, 用于检测lua虚拟机返回的路径是否带有文件后缀。他可以是空值或者".lua"等
local luaProcessAsServer;
local testBreakpointFlag = false;   -- 测试断点的标志位。结合 LuaPanda.testBreakpoint() 测试断点无法停止的原因
--Step控制标记位
local stepOverCounter = 0;      --STEPOVER over计数器
local stepOutCounter = 0;       --STEPOVER out计数器
local HOOK_LEVEL = 3;           --调用栈偏移量,使用clib时为3,lua中不再使用此变量,而是通过函数getSpecificFunctionStackLevel获取
local isUseLoadstring = 0;
local debugger_loadString;
--临时变量
local recordBreakPointPath;     --记录最后一个[可能命中]的断点,用于getInfo以及doctor的断点测试
local coroutineCreate;          --用来记录lua原始的coroutine.create函数
local stopConnectTime = 0;      --用来临时记录stop断开连接的时间
local isInMainThread;
local receiveMsgTimer = 0;
local isUserSetClibPath = false; --用户是否在本文件中自设了clib路径
local hitBpTwiceCheck;  -- 命中断点的Vscode校验结果,默认true (true是命中,false是未命中)
local formatPathCache = {};     -- getinfo -> format
function this.formatPathCache() return formatPathCache; end
local fakeBreakPointCache = {};   --其中用 路径-{行号列表} 形式保存错误命中信息
function this.fakeBreakPointCache() return fakeBreakPointCache; end
--5.1/5.3兼容
if _VERSION == "Lua 5.1" then
    debugger_loadString = loadstring;
else
    debugger_loadString = load;
end

--用户在控制台输入信息的环境变量
local env = setmetatable({ }, {
    __index = function( _ , varName )
        local ret =  this.getWatchedVariable( varName, _G.LuaPanda.curStackId , false);
        return ret;
    end,

    __newindex = function( _ , varName, newValue )
        this.setVariableValue( varName, _G.LuaPanda.curStackId, newValue);
    end
});

-----------------------------------------------------------------------------
-- 流程
-----------------------------------------------------------------------------

---this.bindServer 当lua进程作为Server时,server绑定函数
--- server 在bind时创建, 连接成功后关闭listen , disconnect时置空。reconnect时会查询server,没有的话重新绑定,如果已存在直接accept
function this.bindServer(host, port)
    server = sock
    server:settimeout(listeningTimeoutSec);
    assert(server:bind(host, port));
    server:setoption("reuseaddr", true); --防止已连接状态下新的连接进入,不再reuse
    assert(server:listen(0));
end

-- 以lua作为服务端的形式启动调试器
-- @host 绑定ip , 默认 0.0.0.0
-- @port 绑定port, 默认 8818
function this.startServer(host, port)
    host = tostring(host or "0.0.0.0") ;
    port = tonumber(port) or 8818;
    luaProcessAsServer = true;
    this.printToConsole("Debugger start as SERVER. bind host:" .. host .. " port:".. tostring(port), 1);
    if sock ~= nil then
        this.printToConsole("[Warning] 调试器已经启动,请不要再次调用start()" , 1);
        return;
    end

    --尝试初次连接
    this.changeRunState(runState.DISCONNECT);
    if not this.reGetSock() then
        this.printToConsole("[Error] LuaPanda debugger start success , but get Socket fail , please install luasocket!", 2);
        return;
    end
    recordHost = host;
    recordPort = port;

    this.bindServer(recordHost, recordPort);
    local connectSuccess = server:accept();
    sock = connectSuccess;

    if connectSuccess then
        this.printToConsole("First connect success!");
        this.connectSuccess();
    else
        this.printToConsole("First connect failed!");
        this.changeHookState(hookState.DISCONNECT_HOOK);
    end   
end

-- 启动调试器
-- @host adapter端ip, 默认127.0.0.1
-- @port adapter端port ,默认8818
function this.start(host, port)
    host = tostring(host or "127.0.0.1") ;
    port = tonumber(port) or 8818;
    this.printToConsole("Debugger start as CLIENT. connect host:" .. host .. " port:".. tostring(port), 1);
    if sock ~= nil then
        this.printToConsole("[Warning] 调试器已经启动,请不要再次调用start()" , 1);
        return;
    end

    --尝试初次连接
    this.changeRunState(runState.DISCONNECT);
    if not this.reGetSock() then
        this.printToConsole("[Error] Start debugger but get Socket fail , please install luasocket!", 2);
        return;
    end
    recordHost = host;
    recordPort = port;

    sock:settimeout(connectTimeoutSec);
    local connectSuccess = this.sockConnect(sock);

    if connectSuccess then
        this.printToConsole("First connect success!");
        this.connectSuccess();
    else
        this.printToConsole("First connect failed!");
        this.changeHookState(hookState.DISCONNECT_HOOK);
    end
end

function this.sockConnect(sock)
    if sock then
        local connectSuccess, status = sock:connect(recordHost, recordPort);
        if status == "connection refused" or (not connectSuccess and status == "already connected") then
            this.reGetSock();
        end

        return connectSuccess
    end
    return nil;
end

-- 连接成功,开始初始化
function this.connectSuccess()
    if server then
        server:close(); -- 停止listen 
    end

    this.changeRunState(runState.WAIT_CMD);
    this.printToConsole("connectSuccess", 1);
    --设置初始状态
    local ret = this.debugger_wait_msg();

    --获取debugger文件路径
    if DebuggerFileName == "" then
        local info = debug.getinfo(1, "S")
        for k,v in pairs(info) do
            if k == "source" then
                DebuggerFileName = tostring(v);
                -- 从代码中去后缀
                autoExt = DebuggerFileName:gsub('.*[Ll][Uu][Aa][Pp][Aa][Nn][Dd][Aa]', '');

                if hookLib ~= nil then
                    hookLib.sync_debugger_path(DebuggerFileName);
                end
            end
        end
    end
    if DebuggerToolsName == "" then
        DebuggerToolsName = tools.getFileSource();
        if hookLib ~= nil then
            hookLib.sync_tools_path(DebuggerToolsName);
        end
    end

    if ret == false then
        this.printToVSCode("[debugger error]初始化未完成, 建立连接但接收初始化消息失败。请更换端口重试", 2);
        return;
    end
    this.printToVSCode("debugger init success", 1);

    this.changeHookState(hookState.ALL_HOOK);
    if hookLib == nil then
        --协程调试
        this.changeCoroutinesHookState();
    end

end

--重置数据
function this.clearData()
    OSType = nil;
    clibPath = nil;
    -- reset breaks
    breaks = {};
    formatPathCache = {};
    fakeBreakPointCache = {};
    this.breaks = breaks;
    if hookLib ~= nil then
        hookLib.sync_breakpoints(); --清空断点信息
        hookLib.clear_pathcache(); --清空路径缓存
    end
end

-- 本次连接过程中停止attach ,以提高运行效率
function this.stopAttach()
    openAttachMode = false;
    this.printToConsole("Debugger stopAttach", 1);
    this.clearData()
    this.changeHookState( hookState.DISCONNECT_HOOK );
    stopConnectTime = os.time();
    this.changeRunState(runState.DISCONNECT);
    if sock ~= nil then
        sock:close();
        if luaProcessAsServer and server then server = nil; end;
    end   
end

--断开连接
function this.disconnect()
    this.printToConsole("Debugger disconnect", 1);
    this.clearData()
    this.changeHookState( hookState.DISCONNECT_HOOK );
    stopConnectTime = os.time();
    this.changeRunState(runState.DISCONNECT);

    if sock ~= nil then
        sock:close();
        sock = nil;
        server = nil;
    end

    if recordHost == nil or recordPort == nil then
        --异常情况处理, 在调用LuaPanda.start()前首先调用了LuaPanda.disconnect()
        this.printToConsole("[Warning] User call LuaPanda.disconnect() before set debug ip & port, please call LuaPanda.start() first!", 2);
        return;
    end

    this.reGetSock();
end

function this.replaceCoroutineFuncs()
    if hookLib == nil then
        if coroutineCreate == nil and type(coroutine.create) == "function" then
            this.printToConsole("change coroutine.create");
            coroutineCreate = coroutine.create;
            coroutine.create = function(...)
                local co =  coroutineCreate(...)
                table.insert(coroutinePool,  co);
                --运行状态下,创建协程即启动hook
                this.changeCoroutineHookState(co, currentHookState);
                return co;
            end
        end
    end
end

-----------------------------------------------------------------------------
-- 调试器通用方法
-----------------------------------------------------------------------------
-- 返回断点信息
function this.getBreaks()
    return breaks;
end

---testBreakpoint 测试断点
function this.testBreakpoint()
    if recordBreakPointPath and recordBreakPointPath ~= "" then
        -- testBreakpointFlag = false;
        return this.breakpointTestInfo();    
    else
        local strTable = {};
        strTable[#strTable + 1] = "正在准备进行断点测试,请按照如下步骤操作\n"
        strTable[#strTable + 1] = "1. 请[删除]当前项目中所有断点;\n"
        strTable[#strTable + 1] = "2. 在当前停止行打一个断点;\n"
        strTable[#strTable + 1] = "3. 再次运行 'LuaPanda.testBreakpoint()'"
        testBreakpointFlag = true;
        
        return table.concat(strTable);
    end
end

-- 返回路径相关信息
-- cwd:配置的工程路径  |  info["source"]:通过 debug.getinfo 获得执行文件的路径  |  format:格式化后的文件路径
function this.breakpointTestInfo()
    local ly = this.getSpecificFunctionStackLevel(lastRunFunction.func);
    if type(ly) ~= "number" then
        ly = 2;
    end
    local runSource = lastRunFunction["source"];
    if runSource == nil and hookLib ~= nil then
        runSource = this.getPath(tostring(hookLib.get_last_source()));
    end
    local info = debug.getinfo(ly, "S");
    local NormalizedPath =  this.formatOpath(info["source"]);
    NormalizedPath = this.truncatedPath(NormalizedPath, truncatedOPath);

    local strTable = {}
    local FormatedPath = tostring(runSource);
    strTable[#strTable + 1] = "\n- BreakPoint Test:"
    strTable[#strTable + 1] = "\nUser set lua extension:   ." .. tostring(luaFileExtension);
    strTable[#strTable + 1] = "\nAuto get lua extension:   " .. tostring(autoExt);
    if truncatedOPath and truncatedOPath ~= '' then
    strTable[#strTable + 1] = "\nUser set truncatedOPath:  " .. truncatedOPath;
    end
    strTable[#strTable + 1] = "\nGetInfo:    ".. info["source"];
    strTable[#strTable + 1] = "\nNormalized: " .. NormalizedPath;
    strTable[#strTable + 1] = "\nFormated:   " .. FormatedPath;
    if recordBreakPointPath and recordBreakPointPath ~= "" then
    strTable[#strTable + 1] = "\nBreakpoint: " .. recordBreakPointPath;
    end

    if not autoPathMode then
        if isAbsolutePath then
            strTable[#strTable + 1] = "\n说明:从lua虚拟机获取到的是绝对路径,Formated使用GetInfo路径。" .. winDiskSymbolTip;
        else
            strTable[#strTable + 1] = "\n说明:从lua虚拟机获取到的路径(GetInfo)是相对路径,调试器运行依赖的绝对路径(Formated)是来源于cwd+GetInfo拼接。如Formated路径错误请尝试调整cwd或改变VSCode打开文件夹的位置。也可以在Formated对应的文件下打一个断点,调整直到Formated和Breaks Info中断点路径完全一致。" .. winDiskSymbolTip;
        end
    else
        strTable[#strTable + 1] = "\n说明:自动路径(autoPathMode)模式已开启。";
        if recordBreakPointPath and recordBreakPointPath ~= "" then
            if string.find(recordBreakPointPath , FormatedPath, (-1) * string.len(FormatedPath) , true) then
                -- 短路径断点命中
                if distinguishSameNameFile == false then
                    strTable[#strTable + 1] = "本文件中断点可正常命中。"
                    strTable[#strTable + 1] = "同名文件中的断点识别(distinguishSameNameFile) 未开启,请确保 VSCode 断点不要存在于同名 lua 文件中。";
                else
                    strTable[#strTable + 1] = "同名文件中的断点识别(distinguishSameNameFile) 已开启。";
                    if string.find(recordBreakPointPath, NormalizedPath, 1, true) then
                        strTable[#strTable + 1] = "本文件中断点可被正常命中"
                    else
                        strTable[#strTable + 1] = "断点可能无法被命中,因为 lua 虚拟机中获得的路径 Normalized 不是断点路径 Breakpoint 的子串。 如有需要,可以在 launch.json 中设置 truncatedOPath 来去除 Normalized 部分路径。"
                    end
                end
            else
                strTable[#strTable + 1] = "断点未被命中,原因是 Formated 不是 Breakpoint 路径的子串,或者 Formated 和 Breakpoint 文件后缀不一致"
            end
        else
            strTable[#strTable + 1] = "如果要进行断点测试,请使用 LuaPanda.testBreakpoint()。"
        end
    end
    return table.concat(strTable)
end

--返回版本号等配置
function this.getBaseInfo()
    local strTable = {};
    local jitVer = "";
    if jit and jit.version then
        jitVer = "," .. tostring(jit.version);
    end

    strTable[#strTable + 1] = "Lua Ver:" .. _VERSION .. jitVer .." | Adapter Ver:" .. tostring(adapterVer) .. " | Debugger Ver:" .. tostring(debuggerVer);
    local moreInfoStr = "";
    if hookLib ~= nil then
        local clibVer, forluaVer = hookLib.sync_getLibVersion();
        local clibStr = forluaVer ~= nil and tostring(clibVer) .. " for " .. tostring(math.ceil(forluaVer)) or tostring(clibVer);
        strTable[#strTable + 1] = " | hookLib Ver:" .. clibStr;
        moreInfoStr = moreInfoStr .. "说明: 已加载 libpdebug 库.";
    else
        moreInfoStr = moreInfoStr .. "说明: 未能加载 libpdebug 库。原因请使用 LuaPanda.doctor() 查看";
    end

    local outputIsUseLoadstring = false
    if type(isUseLoadstring) == "number" and isUseLoadstring == 1 then
        outputIsUseLoadstring = true;
    end

    strTable[#strTable + 1] = " | supportREPL:".. tostring(outputIsUseLoadstring);
    strTable[#strTable + 1] = " | useBase64EncodeString:".. tostring(isNeedB64EncodeStr);
    strTable[#strTable + 1] = " | codeEnv:" .. tostring(OSType);
    strTable[#strTable + 1] = " | distinguishSameNameFile:" .. tostring(distinguishSameNameFile) .. '\n';

    strTable[#strTable + 1] = moreInfoStr;
    if OSTypeErrTip ~= nil and OSTypeErrTip ~= '' then
        strTable[#strTable + 1] = '\n' ..OSTypeErrTip;
    end
    return table.concat(strTable);
end

--自动诊断当前环境的错误,并输出信息
function this.doctor()
    local strTable = {};
    if debuggerVer ~= adapterVer then
        strTable[#strTable + 1] = "\n- 建议更新版本\nLuaPanda VSCode插件版本是" ..  adapterVer .. ", LuaPanda.lua文件版本是" ..  debuggerVer .. "。建议检查并更新到最新版本。";
        strTable[#strTable + 1] = "\n更新方式   : https://github.com/Tencent/LuaPanda/blob/master/Docs/Manual/update.md";
        strTable[#strTable + 1] = "\nRelease版本: https://github.com/Tencent/LuaPanda/releases";
    end
    --plibdebug
    if hookLib == nil then
        strTable[#strTable + 1] = "\n\n- libpdebug 库没有加载\n";
        if userSetUseClib then
            --用户允许使用clib插件
            if isUserSetClibPath == true then
                --用户自设了clib地址
                strTable[#strTable + 1] = "用户使用 LuaPanda.lua 中 clibPath 变量指定了 plibdebug 的位置: " .. clibPath;
                if this.tryRequireClib("libpdebug", clibPath) then
                    strTable[#strTable + 1] = "\n引用成功";
                else
                    strTable[#strTable + 1] = "\n引用错误:" .. loadclibErrReason;
                end
            else
                --使用默认clib地址
                local clibExt, platform;
                if OSType == "Darwin" then clibExt = "/?.so;"; platform = "mac";
                elseif OSType == "Linux" then clibExt = "/?.so;"; platform = "linux";
                else clibExt = "/?.dll;"; platform = "win";   end
                local lua_ver;
                if _VERSION == "Lua 5.1" then
                    lua_ver = "501";
                else
                    lua_ver = "503";
                end
                local x86Path = clibPath .. platform .."/x86/".. lua_ver .. clibExt;
                local x64Path = clibPath .. platform .."/x86_64/".. lua_ver .. clibExt;

                strTable[#strTable + 1] = "尝试引用x64库: ".. x64Path;
                if this.tryRequireClib("libpdebug", x64Path) then
                    strTable[#strTable + 1] = "\n引用成功";
                else
                    strTable[#strTable + 1] = "\n引用错误:" .. loadclibErrReason;
                    strTable[#strTable + 1] = "\n尝试引用x86库: ".. x86Path;
                    if this.tryRequireClib("libpdebug", x86Path) then
                        strTable[#strTable + 1] = "\n引用成功";
                    else
                        strTable[#strTable + 1] = "\n引用错误:" .. loadclibErrReason;
                    end
                end
            end
        else
            strTable[#strTable + 1] = "原因是" .. loadclibErrReason;
        end
    end

    --path
    --尝试直接读当前getinfo指向的文件,看能否找到。如果能,提示正确,如果找不到,给出提示,建议玩家在这个文件中打一个断点
    --检查断点,文件和当前文件的不同,给出建议
    local runSource = lastRunFilePath;
    if hookLib ~= nil then
        runSource = this.getPath(tostring(hookLib.get_last_source()));
    end

    -- 在精确路径模式下的路径错误检测
    if not autoPathMode and runSource and runSource ~= "" then
        -- 读文件
        local isFileExist = this.fileExists(runSource);
        if not isFileExist then
            strTable[#strTable + 1] = "\n\n- 路径存在问题\n";
            --解析路径,得到文件名,到断点路径中查这个文件名
            local pathArray = this.stringSplit(runSource, '/');
            --如果pathArray和断点能匹配上
            local fileMatch= false;
            for key, _ in pairs(this.getBreaks()) do
                if string.find(key, pathArray[#pathArray], 1, true) then
                    --和断点匹配了
                    fileMatch = true;
                    -- retStr = retStr .. "\n请对比如下路径:\n";
                    strTable[#strTable + 1] = this.breakpointTestInfo();
                    strTable[#strTable + 1] = "\nfilepath: " .. key;
                    if isAbsolutePath then
                        strTable[#strTable + 1] = "\n说明:从lua虚拟机获取到的是绝对路径,format使用getinfo路径。";
                    else
                        strTable[#strTable + 1] = "\n说明:从lua虚拟机获取到的是相对路径,调试器运行依赖的绝对路径(format)是来源于cwd+getinfo拼接。";
                    end
                    strTable[#strTable + 1] = "\nfilepath是VSCode通过获取到的文件正确路径 , 对比format和filepath,调整launch.json中CWD,或改变VSCode打开文件夹的位置。使format和filepath一致即可。\n如果format和filepath路径仅大小写不一致,设置launch.json中 pathCaseSensitivity:false 可忽略路径大小写";
                end
            end

            if fileMatch == false then
                 --未能和断点匹配
                 strTable[#strTable + 1] = "\n找不到文件:"  .. runSource .. ", 请检查路径是否正确。\n或者在VSCode文件" .. pathArray[#pathArray] .. "中打一个断点后,再执行一次doctor命令,查看路径分析结果。";
            end
        end
    end

    --日志等级对性能的影响
    if logLevel < 1 or consoleLogLevel < 1 then
        strTable[#strTable + 1] = "\n\n- 日志等级\n";
        if logLevel < 1 then
            strTable[#strTable + 1] = "当前日志等级是" ..  logLevel .. ", 会产生大量日志,降低调试速度。建议调整launch.json中logLevel:1";
        end
        if consoleLogLevel < 1 then
            strTable[#strTable + 1] = "当前console日志等级是" ..  consoleLogLevel .. ", 过低的日志等级会降低调试速度,建议调整LuaPanda.lua文件头部consoleLogLevel=2";
        end
    end
    
    if #strTable == 0 then
        strTable[#strTable + 1] = "未检测出问题";
    end
    return table.concat(strTable);
end

function this.fileExists(path)
    local f=io.open(path,"r");
    if f~= nil then io.close(f) return true else return false end
 end

--返回一些信息,帮助用户定位问题
function this.getInfo()
    --用户设置项
    local strTable = {};
    strTable[#strTable + 1] = "\n- Base Info: \n";
    strTable[#strTable + 1] = this.getBaseInfo();
    --已经加载C库,x86/64  未能加载,原因
    strTable[#strTable + 1] = "\n\n- User Setting: \n";
    strTable[#strTable + 1] = "stopOnEntry:" .. tostring(stopOnEntry) .. ' | ';
    -- strTable[#strTable + 1] = "luaFileExtension:" .. luaFileExtension .. ' | ';
    strTable[#strTable + 1] = "logLevel:" .. logLevel .. ' | ' ;
    strTable[#strTable + 1] = "consoleLogLevel:" .. consoleLogLevel .. ' | ';
    strTable[#strTable + 1] = "pathCaseSensitivity:" .. tostring(pathCaseSensitivity) .. ' | ';
    strTable[#strTable + 1] = "attachMode:".. tostring(openAttachMode).. ' | ';
    strTable[#strTable + 1] = "autoPathMode:".. tostring(autoPathMode).. ' | ';

    if userSetUseClib then
        strTable[#strTable + 1] = "useCHook:true";
    else
        strTable[#strTable + 1] = "useCHook:false";
    end

    if logLevel == 0 or consoleLogLevel == 0 then
        strTable[#strTable + 1] = "\n说明:日志等级过低,会影响执行效率。请调整logLevel和consoleLogLevel值 >= 1";
    end

    strTable[#strTable + 1] = "\n\n- Path Info: \n";
    strTable[#strTable + 1] = "clibPath: " .. tostring(clibPath) .. '\n';
    strTable[#strTable + 1] = "debugger: " .. DebuggerFileName .. " | " .. this.getPath(DebuggerFileName) .. '\n';
    strTable[#strTable + 1] = "cwd     : " .. cwd .. '\n';
    strTable[#strTable + 1] = this.breakpointTestInfo();

    if pathErrTip ~= nil and pathErrTip ~= '' then
        strTable[#strTable + 1] = '\n' .. pathErrTip;
    end

    strTable[#strTable + 1] = "\n\n- Breaks Info: \nUse 'LuaPanda.getBreaks()' to watch.";
    return table.concat(strTable);
end

--判断是否在协程中
function this.isInMain()
    return isInMainThread;
end

--添加路径,尝试引用库。完成后把cpath还原,返回引用结果true/false
-- @libName 库名
-- path lib的cpath路径
function this.tryRequireClib(libName , libPath)
    this.printToVSCode("tryRequireClib search : [" .. libName .. "] in "..libPath);
    local savedCpath = package.cpath;
    package.cpath = package.cpath  .. ';' .. libPath;
    this.printToVSCode("package.cpath:" .. package.cpath);
    local status, err = pcall(function() hookLib = require(libName) end);
    if status then
        if type(hookLib) == "table" and this.getTableMemberNum(hookLib) > 0 then
            this.printToVSCode("tryRequireClib success : [" .. libName .. "] in "..libPath);
            package.cpath = savedCpath;
            return true;
        else
            loadclibErrReason = "tryRequireClib fail : require success, but member function num <= 0; [" .. libName .. "] in "..libPath;
            this.printToVSCode(loadclibErrReason);
            hookLib = nil;
            package.cpath = savedCpath;
            return false;
        end
    else
        -- 此处考虑到tryRequireClib会被调用两次,日志级别设置为0,防止输出不必要的信息。
        loadclibErrReason = err;
        this.printToVSCode("[Require clib error]: " .. err, 0);
    end
    package.cpath = savedCpath;
    return false
end
------------------------字符串处理-------------------------
-- 倒序查找字符串 a.b/c查找/ , 返回4
-- @str 被查找的长串
-- @subPattern 查找的子串, 也可以是pattern
-- @plain plane text / pattern
-- @return 未找到目标串返回nil. 否则返回倒序找到的字串位置
function this.revFindString(str, subPattern, plain)
    local revStr = string.reverse(str);
    local _, idx = string.find(revStr, subPattern, 1, plain);
    if idx == nil then return nil end;
    return string.len(revStr) - idx + 1;
end

-- 反序裁剪字符串 如:print(subString("a.b/c", "/"))输出c
-- @return 未找到目标串返回nil. 否则返回被裁剪后的字符串
function this.revSubString(str, subStr, plain)
    local idx = this.revFindString(str, subStr, plain)
    if idx == nil then return nil end;
    return string.sub(str, idx + 1, str.length)
end

-- 把字符串按reps分割成并放入table
-- @str 目标串
-- @reps 分割符。注意这个分隔符是一个pattern
function this.stringSplit( str, separator )
    local retStrTable = {}
    string.gsub(str, '[^' .. separator ..']+', function ( word )
        table.insert(retStrTable, word)
    end)
    return retStrTable;
end

-- 保存CallbackId(通信序列号)
function this.setCallbackId( id )
    if id ~= nil and  id ~= "0" then
        recCallbackId = tostring(id);
    end
end

-- 读取CallbackId(通信序列号)。读取后记录值将被置空
function this.getCallbackId()
    if recCallbackId == nil then
        recCallbackId = "0";
    end
    local id = recCallbackId;
    recCallbackId = "0";
    return id;
end

-- reference from https://www.lua.org/pil/20.1.html
function this.trim (s)
    return (string.gsub(s, "^%s*(.-)%s*$", "%1"))
end

--返回table中成员数量(数字key和非数字key之和)
-- @t 目标table
-- @return 元素数量
function this.getTableMemberNum(t)
    local retNum = 0;
    if type(t) ~= "table" then
        this.printToVSCode("[debugger Error] getTableMemberNum get "..tostring(type(t)), 2)
        return retNum;
    end
    for k,v in pairs(t) do
        retNum = retNum + 1;
    end
    return retNum;
end

-- 生成一个消息Table
function this.getMsgTable(cmd ,callbackId)
    callbackId = callbackId or 0;
    local msgTable = {};
    msgTable["cmd"] = cmd;
    msgTable["callbackId"] = callbackId;
    msgTable["info"] = {};
    return msgTable;
end

function this.serializeTable(tab, name)
    local sTable = tools.serializeTable(tab, name);
    return sTable;
end
------------------------日志打印相关-------------------------
-- 把日志打印在VSCode端
-- @str: 日志内容
-- @printLevel: all(0)/info(1)/error(2)
-- @type: 0:vscode console  1:vscode tip
function this.printToVSCode(str, printLevel, type)
    type = type or 0;
    printLevel = printLevel or 0;
    if currentRunState == runState.DISCONNECT or logLevel > printLevel then
        return;
    end

    local sendTab = {};
    sendTab["callbackId"] = "0";
    if type == 0 then
        sendTab["cmd"] = "output";
    elseif type == 1 then
        sendTab["cmd"] =  "tip";
    else -- type == 2
        sendTab["cmd"] =  "debug_console";
    end
    sendTab["info"] = {};
    sendTab["info"]["logInfo"] = tostring(str);
    this.sendMsg(sendTab);
end

-- 把日志打印在控制台
-- @str: 日志内容
-- @printLevel: all(0)/info(1)/error(2)
function this.printToConsole(str, printLevel)
    printLevel = printLevel or 0;
    if consoleLogLevel > printLevel then
        return;
    end
    print("[LuaPanda] ".. tostring(str));
end

-----------------------------------------------------------------------------
-- 提升兼容性方法
-----------------------------------------------------------------------------
--生成平台无关的路径。
--return:nil(error)/path
function this.genUnifiedPath(path)
    if path == "" or path == nil then
        return "";
    end
    --大小写不敏感时,路径全部转为小写
    if pathCaseSensitivity == false then
        path = string.lower(path);
    end
    --统一路径全部替换成/
    path = string.gsub(path, [[\]], "/");
    --处理 /../   /./
    local pathTab = this.stringSplit(path, '/');
    local newPathTab = {};
    for k, v in ipairs(pathTab) do
        if v == '.' then
            --continue
        elseif v == ".." and #newPathTab >= 1 and newPathTab[#newPathTab]:sub(2,2) ~= ':' then
            --newPathTab有元素,最后一项不是X:
            table.remove(newPathTab);
        else
            table.insert(newPathTab, v);
        end
    end
    --重新拼合后如果是mac路径第一位是/
    local newpath = table.concat(newPathTab, '/');
    if path:sub(1,1) == '/' then
        newpath = '/'.. newpath;
    end

    --win下按照winDiskSymbolUpper的设置修改盘符大小
    if "Windows_NT" == OSType then
        if winDiskSymbolUpper then
            newpath = newpath:gsub("^%a:", string.upper);
            winDiskSymbolTip = "路径中Windows盘符已转为大写。"
        else
            newpath = newpath:gsub("^%a:", string.lower);
            winDiskSymbolTip = "路径中Windows盘符已转为小写。"
        end
    end

    return newpath;
end

function this.getCacheFormatPath(source)
    if source == nil then return formatPathCache end;
    return  formatPathCache[source];
end

function this.setCacheFormatPath(source, dest)
    formatPathCache[source] = dest;
end

-- 处理 opath(info.source) 的函数, 生成一个规范的路径函数(和VScode端checkRightPath逻辑完全一致)
function this.formatOpath(opath)
    -- delete @
    if opath:sub(1,1) == '@' then
        opath = opath:sub(2);
    end
    -- change ./ to /
    if opath:sub(1,2) == './' then
        opath = opath:sub(2);
    end

    opath = this.genUnifiedPath(opath);

    -- lower
    if pathCaseSensitivity == false then
        opath = string.lower(opath);
    end
    --把filename去除后缀
    if autoExt == nil or autoExt == '' then
        -- 在虚拟机返回路径没有后缀的情况下,用户必须自设后缀
        -- 确定filePath中最后一个.xxx 不等于用户配置的后缀, 则把所有的. 转为 /
        if not opath:find(luaFileExtension , (-1) * luaFileExtension:len(), true) then
            -- getinfo 路径没有后缀,把 . 全部替换成 / ,我们不允许用户在文件(或文件夹)名称中出现"." , 因为无法区分 
            opath = string.gsub(opath, "%.", "/");
        else
            -- 有后缀,那么把除后缀外的部分中的. 转为 / 
            opath = this.changePotToSep(opath, luaFileExtension);
        end
    else
        -- 虚拟机路径有后缀
        opath = this.changePotToSep(opath, autoExt);
    end

    -- 截取 路径+文件名 (不带后缀)
    -- change pot to /
    -- opath = string.gsub(opath, "%.", "/");
    return opath;
end

-----------------------------------------------------------------------------
-- 内存相关
-----------------------------------------------------------------------------
function this.sendLuaMemory()
    local luaMem = collectgarbage("count");
    local sendTab = {};
    sendTab["callbackId"] = "0";
    sendTab["cmd"] = "refreshLuaMemory";
    sendTab["info"] = {};
    sendTab["info"]["memInfo"] = tostring(luaMem);
    this.sendMsg(sendTab);
end

-----------------------------------------------------------------------------
-- 网络相关方法
-----------------------------------------------------------------------------
-- 刷新socket
-- @return true/false 刷新成功/失败
function this.reGetSock()  
    if server then return true end

    if sock ~= nil then
        pcall(function() sock:close() end);
    end

    --call slua-unreal luasocket
    sock = lua_extension and lua_extension.luasocket and lua_extension.luasocket().tcp();
    if sock == nil then
        --call normal luasocket
       if pcall(function() sock =  require("socket.core").tcp(); end) then
            this.printToConsole("reGetSock success");
       else
            --call custom function to get socket
            if customGetSocketInstance and pcall( function() sock =  customGetSocketInstance(); end ) then
                this.printToConsole("reGetSock custom success");
            else
                this.printToConsole("[Error] reGetSock fail", 2);
                return false;
            end
       end
    else
        --set ue4 luasocket
        this.printToConsole("reGetSock ue4 success");
    end
    return true;
end

-- 定时(以函数return为时机) 进行attach连接
-- 返回值 hook 可以继续往下走时返回1 ,无需继续时返回0
function this.reConnect()
    if currentHookState == hookState.DISCONNECT_HOOK then
        if os.time() - stopConnectTime < attachInterval then
            -- 未到重连时间
            -- this.printToConsole("Reconnect time less than 1s");
            -- this.printToConsole("os.time:".. os.time() .. " | stopConnectTime:" ..stopConnectTime);
            return 0;
        end
        this.printToConsole("Reconnect !");
        if sock == nil then
            this.reGetSock();
        end

        local connectSuccess;
        if luaProcessAsServer == true and currentRunState == runState.DISCONNECT then
            -- 在 Server 模式下,以及当前处于未连接状态下,才尝试accept新链接。如果不判断可能会出现多次连接,导致sock被覆盖
            if server == nil then
                this.bindServer(recordHost, recordPort);
            end

            sock = server:accept();
            connectSuccess = sock;
        else
            sock:settimeout(connectTimeoutSec);
            connectSuccess = this.sockConnect(sock);
        end

        if connectSuccess then
            this.printToConsole("reconnect success");
            this.connectSuccess();
            return 1;
        else
            this.printToConsole("reconnect failed" );
            stopConnectTime = os.time();
            return 0;
        end
    end
    -- 不必重连,正常继续运行
    return 1;
end

-- 向adapter发消息
-- @sendTab 消息体table
function this.sendMsg( sendTab )
    if isNeedB64EncodeStr and sendTab["info"] ~= nil then
        for _, v in ipairs(sendTab["info"]) do
            if v["type"] == "string" then
                v["value"] = tools.base64encode(v["value"])
            end
        end
    end

    local sendStr = json.encode(sendTab);
    if currentRunState == runState.DISCONNECT then
        this.printToConsole("[debugger error] disconnect but want sendMsg:" .. sendStr, 2);
        this.disconnect();
        return;
    end

    local succ,err;
    if pcall(function() succ,err = sock:send(sendStr..TCPSplitChar.."\n"); end) then
        if succ == nil then
            if err == "closed" then
                this.disconnect();
            end
        end
    end
end

-- 处理 收到的消息
-- @dataStr 接收的消息json
function this.dataProcess( dataStr )
    this.printToVSCode("debugger get:"..dataStr);
    local dataTable = json.decode(dataStr);
    if dataTable == nil then
        this.printToVSCode("[error] Json is error", 2);
        return;
    end

    if dataTable.callbackId ~= "0" then
        this.setCallbackId(dataTable.callbackId);
    end

    if dataTable.cmd == "continue" then
        local info = dataTable.info;
        if info.isFakeHit == "true" and info.fakeBKPath and info.fakeBKLine then 
            -- 设置校验结果标志位,以便hook流程知道结果
            hitBpTwiceCheck = false;
            if hookLib ~= nil and hookLib.set_bp_twice_check_res then
                -- 把结果同步给C
                hookLib.set_bp_twice_check_res(0);
            end
            -- 把假断点的信息加入cache
            if  nil == fakeBreakPointCache[info.fakeBKPath] then
                fakeBreakPointCache[info.fakeBKPath] = {};
            end
            table.insert(fakeBreakPointCache[info.fakeBKPath] ,info.fakeBKLine);
        else
            this.changeRunState(runState.RUN);
        end
        local msgTab = this.getMsgTable("continue", this.getCallbackId());
        this.sendMsg(msgTab);

    elseif dataTable.cmd == "stopOnStep" then
        this.changeRunState(runState.STEPOVER);
        local msgTab = this.getMsgTable("stopOnStep", this.getCallbackId());
        this.sendMsg(msgTab);
        this.changeHookState(hookState.ALL_HOOK);

    elseif dataTable.cmd == "stopOnStepIn" then
        this.changeRunState(runState.STEPIN);
        local msgTab = this.getMsgTable("stopOnStepIn", this.getCallbackId());
        this.sendMsg(msgTab);
        this.changeHookState(hookState.ALL_HOOK);

    elseif dataTable.cmd == "stopOnStepOut" then
        this.changeRunState(runState.STEPOUT);
        local msgTab = this.getMsgTable("stopOnStepOut", this.getCallbackId());
        this.sendMsg(msgTab);
        this.changeHookState(hookState.ALL_HOOK);

    elseif dataTable.cmd == "setBreakPoint" then
        this.printToVSCode("dataTable.cmd == setBreakPoint");
        -- 设置断点时,把 fakeBreakPointCache 清空。这是一个简单的做法,也可以清除具体的条目
        fakeBreakPointCache = {}
        local bkPath = dataTable.info.path;
        bkPath = this.genUnifiedPath(bkPath);
        if testBreakpointFlag then
            recordBreakPointPath = bkPath;
        end
        if autoPathMode then 
            -- 自动路径模式下,仅保留文件名
            -- table[文件名.后缀] -- [fullpath] -- [line , type]
            --                  | - [fullpath] -- [line , type]

            local bkShortPath = this.getFilenameFromPath(bkPath);
            if breaks[bkShortPath] == nil then 
                breaks[bkShortPath] = {};
            end
            breaks[bkShortPath][bkPath] = dataTable.info.bks;
            -- 当v为空时,从断点列表中去除文件
            for k, v in pairs(breaks[bkShortPath]) do
                if next(v) == nil then
                    breaks[bkShortPath][k] = nil;
                end
            end
        else
            if breaks[bkPath] == nil then 
                breaks[bkPath] = {};
            end
            -- 两级 bk path 是为了和自动路径模式结构保持一致
            breaks[bkPath][bkPath] = dataTable.info.bks;
            -- 当v为空时,从断点列表中去除文件
            for k, v in pairs(breaks[bkPath]) do
                if next(v) == nil then
                    breaks[bkPath][k] = nil;
                end
            end
        end

        -- 当v为空时,从断点列表中去除文件
        for k, v in pairs(breaks) do
            if next(v) == nil then
                breaks[k] = nil;
            end
        end

        --sync breaks to c
        if hookLib ~= nil then
            hookLib.sync_breakpoints();
        end

        if currentRunState ~= runState.WAIT_CMD then
            if hookLib == nil then
                local fileBP, G_BP =this.checkHasBreakpoint(lastRunFilePath);
                if fileBP == false then
                    if G_BP == true then
                        this.changeHookState(hookState.MID_HOOK);
                    else
                        this.changeHookState(hookState.LITE_HOOK);
                    end
                else
                    this.changeHookState(hookState.ALL_HOOK);
                end
            end
        else
            local msgTab = this.getMsgTable("setBreakPoint", this.getCallbackId());
            this.sendMsg(msgTab);
            return;
        end
        --其他时机收到breaks消息
        local msgTab = this.getMsgTable("setBreakPoint", this.getCallbackId());
        this.sendMsg(msgTab);
        -- 打印调试信息
        this.printToVSCode("LuaPanda.getInfo()\n" .. this.getInfo())
        this.debugger_wait_msg();
    elseif dataTable.cmd == "setVariable" then
        if currentRunState == runState.STOP_ON_ENTRY or
            currentRunState == runState.HIT_BREAKPOINT or
            currentRunState == runState.STEPOVER_STOP or
            currentRunState == runState.STEPIN_STOP or
            currentRunState == runState.STEPOUT_STOP then
            local msgTab = this.getMsgTable("setVariable", this.getCallbackId());
            local varRefNum = tonumber(dataTable.info.varRef);
            local newValue = tostring(dataTable.info.newValue);
            local needFindVariable = true;    --如果变量是基础类型,直接赋值,needFindVariable = false; 如果变量是引用类型,needFindVariable = true
            local varName = tostring(dataTable.info.varName);
            -- 根据首末含有" ' 判断 newValue 是否是字符串
            local first_chr = string.sub(newValue, 1, 1);
            local end_chr = string.sub(newValue, -1, -1);
            if first_chr == end_chr then
                if first_chr == "'" or first_chr == '"' then
                    newValue = string.sub(newValue, 2, -2);
                    needFindVariable = false;
                end
            end
            --数字,nil,false,true的处理
            if newValue == "nil" and needFindVariable == true  then newValue = nil; needFindVariable = false;
            elseif newValue == "true" and needFindVariable == true then newValue = true; needFindVariable = false;
            elseif newValue == "false" and needFindVariable == true then newValue = false; needFindVariable = false;
            elseif tonumber(newValue) and needFindVariable == true then newValue = tonumber(newValue); needFindVariable = false;
            end

            -- 如果新值是基础类型,则不需遍历
            if dataTable.info.stackId ~= nil and tonumber(dataTable.info.stackId) ~= nil and tonumber(dataTable.info.stackId) > 1 then
                this.curStackId = tonumber(dataTable.info.stackId);
            else
                this.printToVSCode("未能获取到堆栈层级,默认使用 this.curStackId;")
            end

            if varRefNum < 10000 then
                -- 如果修改的是一个 引用变量,那么可直接赋值。但还是要走变量查询过程。查找和赋值过程都需要steakId。 目前给引用变量赋值Object,steak可能有问题
                msgTab.info = this.createSetValueRetTable(varName, newValue, needFindVariable, this.curStackId, variableRefTab[varRefNum]);
            else
                -- 如果修改的是一个基础类型
                local setLimit; --设置检索变量的限定区域
                if varRefNum >= 10000 and varRefNum < 20000 then setLimit = "local";
                elseif varRefNum >= 20000 and varRefNum < 30000 then setLimit = "global";
                elseif varRefNum >= 30000 then setLimit = "upvalue";
                end
                msgTab.info = this.createSetValueRetTable(varName, newValue, needFindVariable, this.curStackId, nil, setLimit);
            end

            this.sendMsg(msgTab);
            this.debugger_wait_msg();
        end

    elseif dataTable.cmd == "getVariable" then
        --仅在停止时处理消息,其他时刻收到此消息,丢弃
        if currentRunState == runState.STOP_ON_ENTRY or
        currentRunState == runState.HIT_BREAKPOINT or
        currentRunState == runState.STEPOVER_STOP or
        currentRunState == runState.STEPIN_STOP or
        currentRunState == runState.STEPOUT_STOP then
            --发送变量给游戏,并保持之前的状态,等待再次接收数据
            --dataTable.info.varRef  10000~20000局部变量
            --                       20000~30000全局变量
            --                       30000~     upvalue
            -- 1000~2000局部变量的查询,2000~3000全局,3000~4000upvalue
            local msgTab = this.getMsgTable("getVariable", this.getCallbackId());
            local varRefNum = tonumber(dataTable.info.varRef);
            if varRefNum < 10000 then
                --查询变量, 此时忽略 stackId
                local varTable = this.getVariableRef(dataTable.info.varRef, true);
                msgTab.info = varTable;
            elseif varRefNum >= 10000 and varRefNum < 20000 then
                --局部变量
                if dataTable.info.stackId ~= nil and tonumber(dataTable.info.stackId) > 1 then
                    this.curStackId = tonumber(dataTable.info.stackId);
                    if type(currentCallStack[this.curStackId - 1]) ~= "table" or  type(currentCallStack[this.curStackId - 1].func) ~= "function" then
                        local str = "getVariable getLocal currentCallStack " .. this.curStackId - 1   .. " Error\n" .. this.serializeTable(currentCallStack, "currentCallStack");
                        this.printToVSCode(str, 2);
                        msgTab.info = {};
                    else
                        local stackId = this.getSpecificFunctionStackLevel(currentCallStack[this.curStackId - 1].func); --去除偏移量
                        local varTable = this.getVariable(stackId, true);
                        msgTab.info = varTable;
                    end
                end

            elseif varRefNum >= 20000 and varRefNum < 30000 then
                --全局变量
                local varTable = this.getGlobalVariable();
                msgTab.info = varTable;
            elseif varRefNum >= 30000 then
                --upValue
                if dataTable.info.stackId ~= nil and tonumber(dataTable.info.stackId) > 1 then
                    this.curStackId = tonumber(dataTable.info.stackId);
                    if type(currentCallStack[this.curStackId - 1]) ~= "table" or  type(currentCallStack[this.curStackId - 1].func) ~= "function" then
                        local str = "getVariable getUpvalue currentCallStack " .. this.curStackId - 1   .. " Error\n" .. this.serializeTable(currentCallStack, "currentCallStack");
                        this.printToVSCode(str, 2);
                        msgTab.info = {};
                    else
                        local varTable = this.getUpValueVariable(currentCallStack[this.curStackId - 1 ].func, true);
                        msgTab.info = varTable;
                    end
                end
            end
            this.sendMsg(msgTab);
            this.debugger_wait_msg();
        end
    elseif dataTable.cmd == "initSuccess" then
        --初始化会传过来一些变量,这里记录这些变量
        --Base64
        if dataTable.info.isNeedB64EncodeStr == "true" then
            isNeedB64EncodeStr = true;
        else
            isNeedB64EncodeStr = false;
        end
        --path
        luaFileExtension = dataTable.info.luaFileExtension;
        local TempFilePath = dataTable.info.TempFilePath;
        if TempFilePath:sub(-1, -1) == [[\]] or TempFilePath:sub(-1, -1) == [[/]] then
            TempFilePath = TempFilePath:sub(1, -2);
        end
        TempFilePath_luaString = TempFilePath;
        cwd = this.genUnifiedPath(dataTable.info.cwd);
        --logLevel
        logLevel = tonumber(dataTable.info.logLevel) or 1;
        --autoPathMode
        if dataTable.info.autoPathMode == "true" then
            autoPathMode = true;
        else
            autoPathMode = false;
        end

        if  dataTable.info.pathCaseSensitivity == "true" then
            pathCaseSensitivity =  true;
            truncatedOPath = dataTable.info.truncatedOPath or "";
        else
            pathCaseSensitivity =  false;
            truncatedOPath = string.lower(dataTable.info.truncatedOPath or "");
        end

        if  dataTable.info.distinguishSameNameFile == "true" then
            distinguishSameNameFile =  true;
        else
            distinguishSameNameFile =  false;
        end

        --OS type
        if nil == OSType then
            --用户未主动设置OSType, 接收VSCode传来的数据
            if type(dataTable.info.OSType) == "string" then 
                OSType = dataTable.info.OSType;
            else
                OSType = "Windows_NT";
                OSTypeErrTip = "未能检测出OSType, 可能是node os库未能加载,系统使用默认设置Windows_NT"
            end
        else
            --用户自设OSType, 使用用户的设置
        end

        --检测用户是否自设了clib路径
        isUserSetClibPath = false;
        if nil == clibPath then
            --用户未设置clibPath, 接收VSCode传来的数据
            if type(dataTable.info.clibPath) == "string" then  
                clibPath = dataTable.info.clibPath;
            else 
                clibPath = ""; 
                pathErrTip = "未能正确获取libpdebug库所在位置, 可能无法加载libpdebug库。";
            end
        else
            --用户自设clibPath
            isUserSetClibPath = true;
        end

        --查找c++的hook库是否存在.  当lua5.4时默认不使用c库
        if tostring(dataTable.info.useCHook) == "true" and "Lua 5.4" ~= _VERSION then
            userSetUseClib = true;      --用户确定使用clib
            if isUserSetClibPath == true then   --如果用户自设了clib路径
                if luapanda_chook ~= nil then
                    hookLib = luapanda_chook;
                else
                    if not(this.tryRequireClib("libpdebug", clibPath)) then
                        this.printToVSCode("Require clib failed, use Lua to continue debug, use LuaPanda.doctor() for more information.", 1);
                    end
                end
            else
                local clibExt, platform;
                if OSType == "Darwin" then clibExt = "/?.so;"; platform = "mac";
                elseif OSType == "Linux" then clibExt = "/?.so;"; platform = "linux";
                else clibExt = "/?.dll;"; platform = "win";   end

                local lua_ver;
                if _VERSION == "Lua 5.1" then
                    lua_ver = "501";
                else
                    lua_ver = "503";
                end

                local x86Path = clibPath.. platform .."/x86/".. lua_ver .. clibExt;
                local x64Path = clibPath.. platform .."/x86_64/".. lua_ver .. clibExt;

                if luapanda_chook ~= nil then
                    hookLib = luapanda_chook;
                else
                    if not(this.tryRequireClib("libpdebug", x64Path) or this.tryRequireClib("libpdebug", x86Path)) then
                        this.printToVSCode("Require clib failed, use Lua to continue debug, use LuaPanda.doctor() for more information.", 1);
                    end
                end
            end
        else
            userSetUseClib = false;
        end

        --adapter版本信息
        adapterVer = tostring(dataTable.info.adapterVersion);
        local msgTab = this.getMsgTable("initSuccess", this.getCallbackId());
        --回传是否使用了lib,是否有loadstring函数
        local isUseHookLib = 0;
        if hookLib ~= nil then
            isUseHookLib = 1;
            --同步数据给c hook
            local luaVerTable = this.stringSplit(debuggerVer , '%.');
            local luaVerNum = luaVerTable[1] * 10000 + luaVerTable[2] * 100 + luaVerTable[3];
            if hookLib.sync_lua_debugger_ver then
            hookLib.sync_lua_debugger_ver(luaVerNum);
            end
            -- hookLib.sync_config(logLevel, pathCaseSensitivity and 1 or 0, autoPathMode and 1 or 0);
            hookLib.sync_config(logLevel, pathCaseSensitivity and 1 or 0);
            hookLib.sync_tempfile_path(TempFilePath_luaString);
            hookLib.sync_cwd(cwd);
            hookLib.sync_file_ext(luaFileExtension);
        end
        --detect LoadString
        isUseLoadstring = 0;
        if debugger_loadString ~= nil and type(debugger_loadString) == "function" then
            if(pcall(debugger_loadString("return 0"))) then
                isUseLoadstring = 1;
            end
        end
        local tab = { debuggerVer = tostring(debuggerVer) , UseHookLib = tostring(isUseHookLib) , UseLoadstring = tostring(isUseLoadstring), isNeedB64EncodeStr = tostring(isNeedB64EncodeStr) };
        msgTab.info  = tab;
        this.sendMsg(msgTab);
        --上面getBK中会判断当前状态是否WAIT_CMD, 所以最后再切换状态。
        stopOnEntry = dataTable.info.stopOnEntry;
        if dataTable.info.stopOnEntry == "true" then
            this.changeRunState(runState.STOP_ON_ENTRY);   --停止在STOP_ON_ENTRY再接收breaks消息
        else
            this.debugger_wait_msg(1);  --等待1s bk消息 如果收到或超时(没有断点)就开始运行
            this.changeRunState(runState.RUN);
        end

    elseif dataTable.cmd == "getWatchedVariable" then
        local msgTab = this.getMsgTable("getWatchedVariable", this.getCallbackId());
        local stackId = tonumber(dataTable.info.stackId);
        --loadstring系统函数, watch插件加载
        if isUseLoadstring == 1 then
            --使用loadstring
            this.curStackId = stackId;
            local retValue = this.processWatchedExp(dataTable.info);
            msgTab.info = retValue
            this.sendMsg(msgTab);
            this.debugger_wait_msg();
            return;
        else
            --旧的查找方式
            local wv =  this.getWatchedVariable(dataTable.info.varName, stackId, true);
            if wv ~= nil then
                msgTab.info = wv;
            end
            this.sendMsg(msgTab);
            this.debugger_wait_msg();
        end
    elseif dataTable.cmd == "stopRun" then
        --停止hook,已不在处理任何断点信息,也就不会产生日志等。发送消息后等待前端主动断开连接
        local msgTab = this.getMsgTable("stopRun", this.getCallbackId());
        this.sendMsg(msgTab);
        if not luaProcessAsServer then
            this.disconnect();
        end
    elseif "LuaGarbageCollect" == dataTable.cmd then
        this.printToVSCode("collect garbage!");
        collectgarbage("collect");
        --回收后刷一下内存
        this.sendLuaMemory();
        this.debugger_wait_msg();
    elseif "runREPLExpression" == dataTable.cmd then
        this.curStackId = tonumber(dataTable.info.stackId);
        local retValue = this.processExp(dataTable.info);
        local msgTab = this.getMsgTable("runREPLExpression", this.getCallbackId());
        msgTab.info = retValue
        this.sendMsg(msgTab);
        this.debugger_wait_msg();
    else
    end
end

-- 变量赋值的处理函数。基本逻辑是先从当前栈帧(curStackId)中取 newValue 代表的变量,找到之后再把找到的值通过setVariableValue写回。
-- @varName             被设置值的变量名
-- @newValue            新值的名字,它是一个string
-- @needFindVariable    是否需要查找引用变量。(用户输入的是否是一个Object)
-- @curStackId          当前栈帧(查找和变量赋值用)
-- @assigndVar          被直接赋值(省去查找过程)
-- @setLimit            赋值时的限制范围(local upvalue global)
function this.createSetValueRetTable(varName, newValue, needFindVariable, curStackId,  assigndVar , setLimit)
    local info;
    local getVarRet;
    -- needFindVariable == true,则使用getWatchedVariable处理(可选, 用来支持 a = b (b为变量的情况))。
    if needFindVariable == false then
        getVarRet = {};
        getVarRet[1] = {variablesReference = 0, value = newValue, name = varName, type = type(newValue)};
    else
        getVarRet =  this.getWatchedVariable( tostring(newValue), curStackId, true);
    end
    if getVarRet ~= nil then
        -- newValue赋变量真实值
        local realVarValue;
        local displayVarValue = getVarRet[1].value;
        if needFindVariable == true then
            if tonumber(getVarRet[1].variablesReference) > 0 then
                realVarValue = variableRefTab[tonumber(getVarRet[1].variablesReference)];
            else
                if getVarRet[1].type == 'number' then realVarValue = tonumber(getVarRet[1].value) end
                if getVarRet[1].type == 'string' then
                    realVarValue = tostring(getVarRet[1].value);
                    local first_chr = string.sub(realVarValue, 1, 1);
                    local end_chr = string.sub(realVarValue, -1, -1);
                    if first_chr == end_chr then
                        if first_chr == "'" or first_chr == '"' then
                            realVarValue = string.sub(realVarValue, 2, -2);
                            displayVarValue  = realVarValue;
                        end
                    end
                end
                if getVarRet[1].type == 'boolean' then
                    if getVarRet[1].value == "true" then
                        realVarValue = true;
                    else
                        realVarValue = false;
                    end
                end
                if getVarRet[1].type == 'nil' then realVarValue = nil end
            end
        else
            realVarValue = getVarRet[1].value;
        end

        local setVarRet;
        if type(assigndVar) ~= table  then
            setVarRet = this.setVariableValue( varName, curStackId, realVarValue, setLimit );
        else
            assigndVar[varName] = realVarValue;
            setVarRet = true;
        end

        if getVarRet[1].type == "string" then
            displayVarValue = '"' .. displayVarValue .. '"';
        end

        if setVarRet ~= false and setVarRet ~= nil then
            local retTip = "变量 ".. varName .." 赋值成功";
            info = { success = "true", name = getVarRet[1].name , type = getVarRet[1].type , value = displayVarValue, variablesReference = tostring(getVarRet[1].variablesReference), tip = retTip};
        else
            info = { success = "false", type = type(realVarValue), value = displayVarValue, tip = "找不到要设置的变量"};
        end

    else
        info = { success = "false", type = nil, value = nil, tip = "输入的值无意义"};
    end
    return info
end

--接收消息
--这里维护一个接收消息队列,因为Lua端未做隔断符保护,变量赋值时请注意其中不要包含隔断符 |*|
-- @timeoutSec 超时时间
-- @return  boolean 成功/失败
function this.receiveMessage( timeoutSec )
    timeoutSec = timeoutSec or MAX_TIMEOUT_SEC;
    sock:settimeout(timeoutSec);
    --如果队列中还有消息,直接取出来交给dataProcess处理
    if #recvMsgQueue > 0 then
        local saved_cmd = recvMsgQueue[1];
        table.remove(recvMsgQueue, 1);
        this.dataProcess(saved_cmd);
        return true;
    end

    if currentRunState == runState.DISCONNECT then
        this.disconnect();
        return false;
    end

    if sock == nil then
        this.printToConsole("[debugger error]接收信息失败  |  reason: socket == nil", 2);
        return;
    end
    local response, err = sock:receive("*l");
    if response == nil then
        if err == "closed" then
            this.printToConsole("[debugger error]接收信息失败  |  reason:"..err, 2);
            this.disconnect();
        end
        return false;
    else

        --判断是否是一条消息,分拆
        local proc_response = string.sub(response, 1, -1 * (TCPSplitChar:len() + 1 ));
        local match_res = string.find(proc_response, TCPSplitChar, 1, true);
        if match_res == nil then
            --单条
            this.dataProcess(proc_response);
        else
            --有粘包
            repeat
                --待处理命令
                local str1 = string.sub(proc_response, 1, match_res - 1);
                table.insert(recvMsgQueue, str1);
                --剩余匹配
                local str2 = string.sub(proc_response, match_res + TCPSplitChar:len() , -1);
                match_res = string.find(str2, TCPSplitChar, 1, true);
            until not match_res
            this.receiveMessage();
        end
        return true;
    end
end

--这里不用循环,在外面处理完消息会在调用回来
-- @timeoutSec 等待时间s
-- @entryFlag 入口标记,用来标识是从哪里调入的
function this.debugger_wait_msg(timeoutSec)
    timeoutSec = timeoutSec or MAX_TIMEOUT_SEC;

    if currentRunState == runState.WAIT_CMD then
        local ret = this.receiveMessage(timeoutSec);
        return ret;
    end

    if currentRunState == runState.STEPOVER or
    currentRunState == runState.STEPIN or
    currentRunState == runState.STEPOUT or
    currentRunState == runState.RUN then
        this.receiveMessage(0);
        return
    end

    if currentRunState == runState.STEPOVER_STOP or
    currentRunState == runState.STEPIN_STOP or
    currentRunState == runState.STEPOUT_STOP or
    currentRunState == runState.HIT_BREAKPOINT or
    currentRunState == runState.STOP_ON_ENTRY
    then
        this.sendLuaMemory();
        this.receiveMessage(MAX_TIMEOUT_SEC);
        return
    end
end

-----------------------------------------------------------------------------
-- 调试器核心方法
-----------------------------------------------------------------------------

------------------------堆栈管理-------------------------


--getStackTable需要建立stackTable,保存每层的lua函数实例(用来取upvalue),保存函数展示层级和ly的关系(便于根据前端传来的stackId查局部变量)
-- @level 要获取的层级
function this.getStackTable( level )
    local functionLevel = 0
    if hookLib ~= nil then
        functionLevel = level or HOOK_LEVEL;
    else
        functionLevel = level or this.getSpecificFunctionStackLevel(lastRunFunction.func);
    end
    local stackTab = {};
    local userFuncSteakLevel = 0; --用户函数的steaklevel
    local clevel = 0
    repeat
        local info = debug.getinfo(functionLevel, "SlLnf")
        if info == nil then
            break;
        end
        if info.source ~= "=[C]" then
            local ss = {};
            ss.file = this.getPath(info);
            local oPathFormated = this.formatOpath(info.source) ; --从lua虚拟机获得的原始路径, 它用于帮助定位VScode端原始lua文件的位置(存在重名文件的情况)。
            ss.oPath = this.truncatedPath(oPathFormated, truncatedOPath);
            ss.name = "文件名"; --这里要做截取
            ss.line = tostring(info.currentline);
            --使用hookLib时,堆栈有偏移量,这里统一调用栈顶编号2
            local ssindex = functionLevel - 3;
            if hookLib ~= nil then
                ssindex = ssindex + 2;
            end
            ss.index = tostring(ssindex);
            table.insert(stackTab,ss);
            --把数据存入currentCallStack
            local callStackInfo = {};
            callStackInfo.name = ss.file;
            callStackInfo.line = ss.line;
            callStackInfo.func = info.func;                     --保存的function
            callStackInfo.realLy = functionLevel;               --真实堆栈层functionLevel(仅debug时用)
            table.insert(currentCallStack, callStackInfo);

            --level赋值
            if userFuncSteakLevel == 0 then
                userFuncSteakLevel = functionLevel;
            end
        else
            local callStackInfo = {};
            callStackInfo.name = info.source;
            callStackInfo.line = info.currentline;              --C函数行号
            callStackInfo.func = info.func;                     --保存的function
            callStackInfo.realLy = functionLevel;               --真实堆栈层functionLevel(仅debug时用)
            table.insert(currentCallStack, callStackInfo);
            clevel = clevel + 1
        end
        functionLevel = functionLevel + 1;
    until info == nil
    return stackTab, userFuncSteakLevel;
end

-- 把路径中去除后缀部分的.变为/, 
-- @filePath 被替换的路径
-- @ext      后缀(后缀前的 . 不会被替换)
function this.changePotToSep(filePath, ext)
    local idx = filePath:find(ext, (-1) * ext:len() , true)
    if idx then 
        local tmp = filePath:sub(1, idx - 1):gsub("%.", "/");
        filePath = tmp .. ext;
    end
    return filePath;
end

--- this.truncatedPath 从 beTruncatedPath 字符串中去除 rep 匹配到的部分
function this.truncatedPath(beTruncatedPath, rep)
    if beTruncatedPath and beTruncatedPath ~= '' and rep and rep ~= "" then
        local _, lastIdx = string.find(beTruncatedPath , rep);
        if lastIdx then
            beTruncatedPath = string.sub(beTruncatedPath, lastIdx + 1);
        end
    end
    return beTruncatedPath;
end

--这个方法是根据的cwd和luaFileExtension对getInfo获取到的路径进行标准化
-- @info getInfo获取的包含调用信息table
function this.getPath( info )
    local filePath = info;
    if type(info) == "table" then
        filePath = info.source;
    end
    --尝试从Cache中获取路径
    local cachePath = this.getCacheFormatPath(filePath);
    if cachePath~= nil and type(cachePath) == "string" then
        return cachePath;
    end

    -- originalPath是getInfo的原始路径,后面用来填充路径缓存的key
    local originalPath = filePath;
    
    --如果路径头部有@,去除
    if filePath:sub(1,1) == '@' then
        filePath = filePath:sub(2);
    end

    --如果路径头部有./,去除
    if filePath:sub(1,2) == './' then
        filePath = filePath:sub(3);
    end
    -- getPath的参数路径可能来自于hook, 也可能是一个已标准的路径
    if userDotInRequire then 
        if autoExt == nil or autoExt == '' then
            -- 在虚拟机返回路径没有后缀的情况下,用户必须自设后缀
            -- 确定filePath中最后一个.xxx 不等于用户配置的后缀, 则把所有的. 转为 /
            if not filePath:find(luaFileExtension , (-1) * luaFileExtension:len(), true) then
                -- getinfo 路径没有后缀,把 . 全部替换成 / ,我们不允许用户在文件(或文件夹)名称中出现"." , 因为无法区分 
                filePath = string.gsub(filePath, "%.", "/");
            else
                -- 有后缀,那么把除后缀外的部分中的. 转为 / 
                filePath = this.changePotToSep(filePath, luaFileExtension);
            end

        else
            -- 虚拟机路径有后缀
            filePath = this.changePotToSep(filePath, autoExt);
        end
    end

    --后缀处理
    if luaFileExtension ~= "" then
        --判断后缀中是否包含%1等魔法字符.用于从lua虚拟机获取到的路径含.的情况
        if string.find(luaFileExtension, "%%%d") then
            filePath = string.gsub(filePath, "%.[%w%.]+$", luaFileExtension);
        else
            filePath = string.gsub(filePath, "%.[%w%.]+$", "");
            filePath = filePath .. "." .. luaFileExtension;
        end
    end


    if not autoPathMode then
        --绝对路径和相对路径的处理  |  若在Mac下以/开头,或者在Win下以*:开头,说明是绝对路径,不需要再拼。
        if filePath:sub(1,1) == [[/]] or filePath:sub(1,2):match("^%a:") then
            isAbsolutePath = true;
        else
            isAbsolutePath = false;
            if cwd ~= "" then
                --查看filePath中是否包含cwd
                local matchRes = string.find(filePath, cwd, 1, true);
                if matchRes == nil then
                    filePath = cwd.."/"..filePath;
                end
            end
        end
    end
    filePath = this.genUnifiedPath(filePath);

    if autoPathMode then
        -- 自动路径模式下,只保留文件名
        filePath = this.getFilenameFromPath(filePath)
    end
    --放入Cache中缓存
    this.setCacheFormatPath(originalPath, filePath);
    return filePath;
end

--从路径中获取[文件名.后缀]
function this.getFilenameFromPath(path)
    if path == nil then 
        return ''; 
    end

    return string.match(path, "([^/]*)$");
end

--获取当前函数的堆栈层级
--原理是向上查找,遇到DebuggerFileName就调过。但是可能存在代码段和C导致不确定性。目前使用getSpecificFunctionStackLevel代替。
function this.getCurrentFunctionStackLevel()
    -- print(debug.traceback("===getCurrentFunctionStackLevel Stack trace==="))
    local funclayer = 2;
    repeat
        local info = debug.getinfo(funclayer, "S"); --通过name来判断
        if info ~= nil then
            local matchRes = ((info.source == DebuggerFileName) or (info.source == DebuggerToolsName));
            if matchRes == false then
                return (funclayer - 1);
            end
        end
        funclayer = funclayer + 1;
    until not info
    return 0;
end

--获取指定函数的堆栈层级
--通常用来获取最后一个用户函数的层级,用法是从currentCallStack取用户点击的栈,再使用本函数取对应层级。
-- @func 被获取层级的function
function this.getSpecificFunctionStackLevel( func )
    local funclayer = 2;
    repeat
        local info = debug.getinfo(funclayer, "f"); --通过name来判断
        if info ~= nil then
            if info.func == func then
                return (funclayer - 1);
            end
        end
        funclayer = funclayer + 1;
    until not info
    return 0;
end

--检查当前堆栈是否是Lua
-- @checkLayer 指定的栈层
function this.checkCurrentLayerisLua( checkLayer )
    local info = debug.getinfo(checkLayer, "S");
    if info == nil then
        return nil;
    end
    info.source = this.genUnifiedPath(info.source);
    if info ~= nil then
        for k,v in pairs(info) do
            if k == "what" then
                if v == "C" then
                    return false;
                else
                    return true;
                end
            end
        end
    end
    return nil;
end

-- 在 fakeBreakPointCache 中查询此断点是否真实存在
-- 因为同名文件的影响, 有些断点是命中错误的。经过VScode校验后,这些错误命中的断点信息被存在fakeBreakPointCache中
function this.checkRealHitBreakpoint( oPath, line )
    -- 在假命中列表中搜索,如果本行有过假命中记录,返回 false
    if oPath and fakeBreakPointCache[oPath] then
        for _, value in ipairs(fakeBreakPointCache[oPath]) do
            if tonumber(value) == tonumber(line) then
                this.printToVSCode("cache hit bp in same name file.  source:" .. tostring(oPath) .. " line:" .. tostring(line)); 
                return false;
            end
        end
    end
    return true;  
end

------------------------断点处理-------------------------
--- this.isHitBreakpoint 判断断点是否命中。这个方法在c mod以及lua中都有调用
-- @param breakpointPath 文件名+后缀
-- @param opath          getinfo path
-- @param curLine        当前执行行号
function this.isHitBreakpoint(breakpointPath, opath, curLine)
    if breaks[breakpointPath] then
        local oPathFormated;
        for fullpath, fullpathNode in pairs(breaks[breakpointPath]) do
            recordBreakPointPath = fullpath; --这里是为了兼容用户断点行号没有打对的情况
            local line_hit,cur_node = false,{};
            for _, node in ipairs(fullpathNode) do
                if tonumber(node["line"]) == tonumber(curLine) then 
                    line_hit = true;    -- fullpath 文件中 有行号命中
                    cur_node = node;
                    recordBreakPointPath = fullpath;  --行号命中后,再设置一次,保证路径准确
                    break;
                end
            end

            -- 在lua端不知道是否有同名文件,基本思路是先取文件名,用文件名和breakpointArray 进行匹配。
            -- 当文件名匹配上时,可能存在多个同名文件中存在断点的情况。这时候需要用 oPath 和 fullpath 进行对比,取出正确的。
            -- 当本地文件中有断点,lua做了初步命中后,可能存在 stack , 断点文件有同名的情况。这就需要vscode端也需要checkfullpath函数,使用opath进行文件校验。
            if line_hit then
                if oPathFormated == nil then
                    -- 为了避免性能消耗,仅在行号命中时才处理 opath 到标准化路径
                    oPathFormated = this.formatOpath(opath);
                    -- 截取
                    oPathFormated = this.truncatedPath(oPathFormated, truncatedOPath);
                end
                
                if (not distinguishSameNameFile) or (string.match(fullpath, oPathFormated ) and this.checkRealHitBreakpoint(opath, curLine)) then
                    -- type是TS中的枚举类型,其定义在BreakPoint.tx文件中
                        -- enum BreakpointType {
                        --     conditionBreakpoint = 0,
                        --     logPoint,
                        --     lineBreakpoint
                        -- }
                        
                    -- 处理断点
                    if cur_node["type"] == "0" then
                        -- condition breakpoint
                        -- 注意此处不要使用尾调用,否则会影响调用栈,导致Lua5.3和Lua5.1中调用栈层级不同
                        local conditionRet = this.IsMeetCondition(cur_node["condition"]);
                        -- this.printToVSCode("Condition BK: condition:" .. cur_node["condition"] .. "  conditionRet " .. tostring(conditionRet));
                        return conditionRet;
                    elseif cur_node["type"] == "1" then
                        -- log point
                        this.printToVSCode("[LogPoint Output]: " .. cur_node["logMessage"], 2, 2);
                        return false;
                    else
                        -- line breakpoint
                        return true;
                    end
                end
            end
        end
    else
        testBreakpointFlag = false; --如果用户打开了测试断点的标志位而未主动关闭,会在lua继续运行时关闭。
        recordBreakPointPath = '';  --当切换文件时置空,避免提示给用户错误信息
    end
    return false;
end

-- 条件断点处理函数
-- 返回true表示条件成立
-- @conditionExp 条件表达式
function this.IsMeetCondition(conditionExp)
    -- 判断条件之前更新堆栈信息
    currentCallStack = {};
    variableRefTab = {};
    variableRefIdx = 1;
    if  hookLib then
        this.getStackTable(4);
    else
        this.getStackTable();
    end

    this.curStackId = 2; --在用户空间最上层执行

    local conditionExpTable = {["varName"] = conditionExp}
    local retTable = this.processWatchedExp(conditionExpTable)

    local isMeetCondition = false;
    local function HandleResult()
        if retTable[1]["isSuccess"] == "true" then
            if retTable[1]["value"] == "nil" or (retTable[1]["value"] == "false" and retTable[1]["type"] == "boolean") then
                isMeetCondition = false;
            else
                isMeetCondition = true;
            end
        else
            isMeetCondition = false;
        end
    end

    xpcall(HandleResult, function() isMeetCondition = false; end)
    return isMeetCondition;
end

--加入断点函数
function this.BP()
    this.printToConsole("BP()");
    if hookLib == nil then
        if currentHookState == hookState.DISCONNECT_HOOK then
            this.printToConsole("BP() but NO HOOK");
            return;
        end

        local co, isMain = coroutine.running();
        if _VERSION == "Lua 5.1" then
            if co == nil then
                isMain = true;
            else
                isMain = false;
            end
        end

        if isMain == true then
            this.printToConsole("BP() in main");
        else
            this.printToConsole("BP() in coroutine");
            debug.sethook(co, this.debug_hook, "lrc");
        end
        hitBP = true;
    else
        if hookLib.get_libhook_state() == hookState.DISCONNECT_HOOK then
            this.printToConsole("BP() but NO C HOOK");
            return;
        end

        --clib, set hitBP
        hookLib.sync_bp_hit(1);
    end
    this.changeHookState(hookState.ALL_HOOK);
    return true;
end

-- 检查当前文件中是否有断点
-- 如果填写参数fileName  返回fileName中有无断点, 全局有无断点
-- fileName为空,返回全局是否有断点
function this.checkHasBreakpoint(fileName)
    local hasBk = false;
    --有无全局断点
    if next(breaks) == nil then
        hasBk = false;
    else
        hasBk = true;
    end
    --当前文件中是否有断点
    if fileName ~= nil then
        return breaks[fileName] ~= nil, hasBk;
    else
        return hasBk;
    end
end

function this.checkfuncHasBreakpoint(sLine, eLine, fileName)
    if breaks[fileName] == nil then
        return false;
    end
    sLine = tonumber(sLine);
    eLine = tonumber(eLine);

    --起始行号>结束行号,或者sLine = eLine = 0
    if sLine >= eLine then
        return true;
    end

    if this.getTableMemberNum(breaks[fileName]) <= 0 then
        return false;
    else
        for k,v in pairs(breaks[fileName]) do
            for _, node in ipairs(v) do
                if tonumber(node.line) > sLine and tonumber(node.line) <= eLine then
                    return true;
                end   
            end
        end
    end
    return false;
end
------------------------HOOK模块-------------------------
-- 钩子函数
-- @event 执行状态(call,return,line)
-- @line    行号
function this.debug_hook(event, line)
    if this.reConnect() == 0 then return; end

    if logLevel == 0 then
        local logTable = {"-----enter debug_hook-----\n", "event:", event, "  line:", tostring(line), " currentHookState:",currentHookState," currentRunState:", currentRunState};
        local logString = table.concat(logTable);
        this.printToVSCode(logString);
    end

    --litehook 仅非阻塞接收断点
    if currentHookState ==  hookState.LITE_HOOK then
        local ti = os.time();
        if ti - receiveMsgTimer > 1 then
            this.debugger_wait_msg(0);
            receiveMsgTimer = ti;
        end
        return;
    end

    --运行中
    local info;
    local co, isMain = coroutine.running();
    if _VERSION == "Lua 5.1" then
        if co == nil then
            isMain = true;
        else
            isMain = false;
        end
    end
    isInMainThread = isMain;
    if isMain == true then
        info = debug.getinfo(2, "Slf")
    else
        info = debug.getinfo(co, 2, "Slf")
    end
    info.event = event;

    this.real_hook_process(info);
end

function this.real_hook_process(info)
    local jumpFlag = false;
    local event = info.event;

    --如果当前行在Debugger中,不做处理
    local matchRes = ((info.source == DebuggerFileName) or (info.source == DebuggerToolsName));
    if matchRes == true then
        return;
    end

    --即使MID hook在C中, 或者是Run或者单步时也接收消息
    if currentRunState == runState.RUN or
    currentRunState == runState.STEPOVER or
    currentRunState == runState.STEPIN or
    currentRunState == runState.STEPOUT then
        local ti = os.time();
        if ti - receiveMsgTimer > 1 then
            this.debugger_wait_msg(0);
            receiveMsgTimer = ti;
        end
    end

    --不处理C函数
    if info.source == "=[C]" then
        this.printToVSCode("current method is C");
        return;
    end

    --不处理 slua "temp buffer"
    if info.source == "temp buffer" then
        this.printToVSCode("current method is in temp buffer");
        return;
    end

    --不处理 xlua "chunk"
    if info.source == "chunk" then
        this.printToVSCode("current method is in chunk");
        return;
    end

    --lua 代码段的处理,目前暂不调试代码段。
    if info.short_src:match("%[string \"")  then
            --当shortSrc中出现[string时]。要检查一下source, 区别是路径还是代码段. 方法是看路径中有没有\t \n ;
            if info.source:match("[\n;=]") then
                --是代码段,调过
                this.printToVSCode("hook jump Code String!");
                jumpFlag = true;
            end
    end

    --标准路径处理
    if jumpFlag == false then
        info.orininal_source = info.source; --使用 info.orininal_source 记录lua虚拟机传来的原始路径
        info.source = this.getPath(info);
    end
    --本次执行的函数和上次执行的函数作对比,防止在一行停留两次
    if lastRunFunction["currentline"] == info["currentline"] and lastRunFunction["source"] == info["source"] and lastRunFunction["func"] == info["func"] and lastRunFunction["event"] == event then
        this.printToVSCode("run twice");
    end
    --记录最后一次调用信息
    if jumpFlag == false then
        lastRunFunction = info;
        lastRunFunction["event"] = event;
        lastRunFilePath = info.source;
    end
    --输出函数信息到前台
    if logLevel == 0 and jumpFlag == false then
        local logTable = {"[lua hook] event:", tostring(event), " currentRunState:",tostring(currentRunState)," currentHookState:",tostring(currentHookState)," jumpFlag:", tostring(jumpFlag)};
        for k,v in pairs(info) do
            table.insert(logTable, tostring(k));
            table.insert(logTable, ":");
            table.insert(logTable, tostring(v));
            table.insert(logTable, " ");
        end
        local logString = table.concat(logTable);
        this.printToVSCode(logString);
    end

    --仅在line时做断点判断。进了断点之后不再进入本次STEP类型的判断,用Aflag做标记
    local isHit = false;
    if tostring(event) == "line" and jumpFlag == false then
        if currentRunState == runState.RUN or currentRunState == runState.STEPOVER or currentRunState == runState.STEPIN or currentRunState == runState.STEPOUT then
            --断点判断
            isHit = this.isHitBreakpoint(info.source, info.orininal_source, info.currentline) or hitBP;
            if isHit == true then
                this.printToVSCode("HitBreakpoint!");
                --备份信息
                local recordStepOverCounter = stepOverCounter;
                local recordStepOutCounter = stepOutCounter;
                local recordCurrentRunState = currentRunState;
                --计数器清0
                stepOverCounter = 0;
                stepOutCounter = 0;
                this.changeRunState(runState.HIT_BREAKPOINT);
                hitBpTwiceCheck = true; -- 命中标志默认设置为true, 如果校验通过,会保留这个标记,校验失败会修改
                if hitBP then 
                    hitBP = false; --hitBP是断点硬性命中标记
                    --发消息并等待
                    this.SendMsgWithStack("stopOnCodeBreakpoint");
                else
                    --发消息并等待
                    this.SendMsgWithStack("stopOnBreakpoint");   
                    --若二次校验未命中,恢复状态
                    if hitBpTwiceCheck == false then 
                        isHit = false;
                        -- 确认未命中,把状态恢复,继续运行
                        this.changeRunState(recordCurrentRunState);
                        stepOverCounter = recordStepOverCounter;
                        stepOutCounter = recordStepOutCounter;
                    end
                end
            end
        end
    end

    if isHit == true then
        return;        
    end

    if currentRunState == runState.STEPOVER then
        -- line stepOverCounter!= 0 不作操作
        -- line stepOverCounter == 0 停止
        if event == "line" and stepOverCounter <= 0 and jumpFlag == false then
            stepOverCounter = 0;
            this.changeRunState(runState.STEPOVER_STOP)
            this.SendMsgWithStack("stopOnStep");
        elseif event == "return" or event == "tail return" then
            --5.1中是tail return
            if stepOverCounter ~= 0 then
                stepOverCounter = stepOverCounter - 1;
            end
        elseif event == "call" then
            stepOverCounter = stepOverCounter + 1;
        end
    elseif currentRunState == runState.STOP_ON_ENTRY then
        --在Lua入口点处直接停住
        if event == "line" and jumpFlag == false then
            --初始化内存分析的变量
            -- MemProfiler.getSystemVar();
            --这里要判断一下是Lua的入口点,否则停到
            this.SendMsgWithStack("stopOnEntry");
        end
    elseif currentRunState == runState.STEPIN then
        if event == "line" and jumpFlag == false then
            this.changeRunState(runState.STEPIN_STOP)
            this.SendMsgWithStack("stopOnStepIn");
        end
    elseif currentRunState == runState.STEPOUT then
        --line 不做操作
        --in 计数器+1
        --out 计数器-1
        if jumpFlag == false then
            if stepOutCounter <= -1 then
                stepOutCounter = 0;
                this.changeRunState(runState.STEPOUT_STOP)
                this.SendMsgWithStack("stopOnStepOut");
            end
        end

        if event == "return" or event == "tail return" then
            stepOutCounter = stepOutCounter - 1;
        elseif event == "call" then
            stepOutCounter = stepOutCounter + 1;
        end
    end

    --在RUN时检查并改变状态
    if hookLib == nil then
        if currentRunState == runState.RUN and jumpFlag == false and currentHookState ~= hookState.DISCONNECT_HOOK then
            local fileBP, G_BP = this.checkHasBreakpoint(lastRunFilePath);
            if fileBP == false then
                --文件无断点
                if G_BP == true then
                    this.changeHookState(hookState.MID_HOOK);
                else
                    this.changeHookState(hookState.LITE_HOOK);
                end
            else
                --文件有断点, 判断函数内是否有断点
                local funHasBP = this.checkfuncHasBreakpoint(lastRunFunction.linedefined, lastRunFunction.lastlinedefined, lastRunFilePath);
                if  funHasBP then
                    --函数定义范围内
                    this.changeHookState(hookState.ALL_HOOK);
                else
                    this.changeHookState(hookState.MID_HOOK);
                end
            end

            --MID_HOOK状态下,return需要在下一次hook检查文件(return时,还是当前文件,检查文件时状态无法转换)
            if  (event == "return" or event == "tail return") and currentHookState == hookState.MID_HOOK then
                this.changeHookState(hookState.ALL_HOOK);
            end
        end
    end
end

-- 向Vscode发送标准通知消息,cmdStr是消息类型
-- @cmdStr  命令字
function this.SendMsgWithStack(cmdStr)
    local msgTab = this.getMsgTable(cmdStr);
    local userFuncLevel = 0;
    msgTab["stack"] , userFuncLevel= this.getStackTable();
    if userFuncLevel ~= 0 then
        lastRunFunction["func"] = debug.getinfo( (userFuncLevel - 1) , 'f').func;
    end
    this.sendMsg(msgTab);
    this.debugger_wait_msg();
end

-- hook状态改变
-- @s 目标状态
function this.changeHookState( s )
    if hookLib == nil and currentHookState == s then
        return;
    end

    this.printToConsole("change hook state :"..s)
    if s ~= hookState.DISCONNECT_HOOK then
        this.printToVSCode("change hook state : "..s)
    end

    currentHookState = s;
    if s == hookState.DISCONNECT_HOOK then
        --为了实现通用attach模式,require即开始hook,利用r作为时机发起连接
        if openAttachMode == true then
            if hookLib then hookLib.lua_set_hookstate(hookState.DISCONNECT_HOOK); else debug.sethook(this.debug_hook, "r", 1000000); end
        else
            if hookLib then hookLib.endHook(); else debug.sethook(); end
        end
    elseif s == hookState.LITE_HOOK then
        if hookLib then hookLib.lua_set_hookstate(hookState.LITE_HOOK); else debug.sethook(this.debug_hook, "r"); end
    elseif s == hookState.MID_HOOK then
        if hookLib then hookLib.lua_set_hookstate(hookState.MID_HOOK); else debug.sethook(this.debug_hook, "rc"); end
    elseif s == hookState.ALL_HOOK then
        if hookLib then hookLib.lua_set_hookstate(hookState.ALL_HOOK); else debug.sethook(this.debug_hook, "lrc");end
    end
    --coroutine
    if hookLib == nil then
        this.changeCoroutinesHookState();
    end
end

-- 运行状态机,状态变更
-- @s 目标状态
-- @isFromHooklib 1:从libc库中发来的状态改变 | 0:lua发来的状态改变
function this.changeRunState(s , isFromHooklib)
    local msgFrom;
    if isFromHooklib == 1 then
        msgFrom = "libc";
    else
        msgFrom = "lua";
    end

    --WAIT_CMD状态会等待接收消息,以下两个状态下不能发消息
    this.printToConsole("changeRunState :"..s.. " | from:"..msgFrom);
    if s ~= runState.DISCONNECT and s ~= runState.WAIT_CMD then
        this.printToVSCode("changeRunState :"..s.." | from:"..msgFrom);
    end

    if hookLib ~= nil and isFromHooklib ~= 1 then
        hookLib.lua_set_runstate(s);
    end
    currentRunState = s;
    --状态切换时,清除记录栈信息的状态
    currentCallStack = {};
    variableRefTab = {};
    variableRefIdx = 1;
end

-- 修改协程状态
-- @s hook标志位
function this.changeCoroutinesHookState(s)
    s = s or currentHookState;
    this.printToConsole("change [Coroutine] HookState: "..tostring(s));
    for k ,co in pairs(coroutinePool) do
        if coroutine.status(co) == "dead" then
            coroutinePool[k] = nil
        else
            this.changeCoroutineHookState(co, s)
        end
    end
end

function this.changeCoroutineHookState(co, s)
    if s == hookState.DISCONNECT_HOOK then
        if openAttachMode == true then
            debug.sethook(co, this.debug_hook, "r", 1000000);
        else
            debug.sethook(co, this.debug_hook, "");
        end
    elseif s == hookState.LITE_HOOK then
        debug.sethook(co , this.debug_hook, "r");
    elseif s == hookState.MID_HOOK then
        debug.sethook(co , this.debug_hook, "rc");
    elseif s == hookState.ALL_HOOK then
        debug.sethook(co , this.debug_hook, "lrc");
    end
end
-------------------------变量处理相关-----------------------------

--清空REPL的env环境
function this.clearEnv()
    if this.getTableMemberNum(env) > 0 then
        --清空env table
        env = setmetatable({}, getmetatable(env));
    end
end

--返回REPL的env环境
function this.showEnv()
    return env;
end

-- 用户观察table的查找函数。用tableVarName作为key去查逐层级查找realVar是否匹配
-- @tableVarName 是用户观察的变量名,已经按层级被解析成table。比如用户输出a.b.c,tableVarName是 a = { b = { c } }
-- @realVar 是待查询 table
-- @return  返回查到的table。没查到返回nil
function this.findTableVar( tableVarName,  realVar)
    if type(tableVarName) ~= "table" or type(realVar) ~= "table" then
        return nil;
    end

    local layer = 2;
    local curVar = realVar;
    local jumpOutFlag = false;
    repeat
        if tableVarName[layer] ~= nil then
            --这里优先展示数字key,比如a{"1" = "aa", [1] = "bb"} 会展示[1]的值
            local tmpCurVar = nil;
            xpcall(function() tmpCurVar = curVar[tonumber(tableVarName[layer])]; end , function() tmpCurVar = nil end );
            if tmpCurVar == nil then
                xpcall(function() curVar = curVar[tostring(tableVarName[layer])]; end , function() curVar = nil end );
            else
                curVar = tmpCurVar;
            end
            layer = layer + 1;
            if curVar == nil then
                return nil;
            end
        else
            --找到
            jumpOutFlag = true;
        end
    until(jumpOutFlag == true)
    return curVar;
end

-- 根据传入信息生成返回的变量信息
-- @variableName    变量名
-- @variableIns        变量实例
-- @return              包含变量信息的格式化table
function this.createWatchedVariableInfo(variableName, variableIns)
    local var = {};
    var.name = variableName;
    var.type = tostring(type(variableIns));
    xpcall(function() var.value = tostring(variableIns) end , function() var.value = tostring(type(variableIns)) .. " [value can't trans to string]" end );
    var.variablesReference = "0";  --这个地方必须用“0”, 以免variableRefTab[0]出错

    if var.type == "table" or var.type == "function" or var.type == "userdata" then
        var.variablesReference = variableRefIdx;
        variableRefTab[variableRefIdx] = variableIns;
        variableRefIdx = variableRefIdx + 1;
        if var.type == "table" then
            local memberNum = this.getTableMemberNum(variableIns);
            var.value = memberNum .." Members ".. var.value;
        end
    elseif var.type == "string" then
        var.value = '"' ..variableIns.. '"';
    end
    return var;
end

-- 设置 global 变量
-- @varName 被修改的变量名
-- @newValue 新的值
function this.setGlobal(varName, newValue)
    _G[varName] = newValue;
    this.printToVSCode("[setVariable success] 已设置  _G.".. varName .. " = " .. tostring(newValue) );
    return true;
end

-- 设置 upvalue 变量
-- @varName 被修改的变量名
-- @newValue 新的值
-- @stackId 变量所在stack栈层
-- @tableVarName 变量名拆分成的数组
function this.setUpvalue(varName, newValue, stackId, tableVarName)
    local ret = false;
    local upTable = this.getUpValueVariable(currentCallStack[stackId - 1 ].func, true);
    for i, realVar in ipairs(upTable) do
        if realVar.name == varName then
            if #tableVarName > 0 and type(realVar) == "table" then
                --处理a.b.c的table类型
                local findRes = this.findTableVar(tableVarName,  variableRefTab[realVar.variablesReference]);
                if findRes ~= nil then
                    --命中
                        local setVarRet = debug.setupvalue (currentCallStack[stackId - 1 ].func, i, newValue);
                        if setVarRet == varName then
                            this.printToConsole("[setVariable success1] 已设置 upvalue ".. varName .. " = " .. tostring(newValue) );
                            ret = true;
                        else
                            this.printToConsole("[setVariable error1] 未能设置 upvalue ".. varName .. " = " .. tostring(newValue).." , 返回结果: ".. tostring(setVarRet));
                        end
                        return ret;
                end
            else
                --命中
                local setVarRet = debug.setupvalue (currentCallStack[stackId - 1 ].func, i, newValue);
                if setVarRet == varName then
                    this.printToConsole("[setVariable success] 已设置 upvalue ".. varName .. " = " .. tostring(newValue) );
                    ret = true;
                else
                    this.printToConsole("[setVariable error] 未能设置 upvalue ".. varName .. " = " .. tostring(newValue).." , 返回结果: ".. tostring(setVarRet));
                end
                return ret;
            end
        end
    end
    return ret;
end

-- 设置local 变量
-- @varName 被修改的变量名
-- @newValue 新的值
-- @tableVarName 变量名拆分成的数组
function this.setLocal( varName, newValue, tableVarName, stackId)
    local istackId = tonumber(stackId);
    local offset = (istackId and istackId - 2) or 0;
    local layerVarTab, ly = this.getVariable(nil , true, offset);
    local ret = false;
    for i, realVar in ipairs(layerVarTab) do
        if realVar.name == varName then
            if #tableVarName > 0 and type(realVar) == "table" then
                --处理a.b.c的table类型
                local findRes = this.findTableVar(tableVarName,  variableRefTab[realVar.variablesReference]);
                if findRes ~= nil then
                        --命中
                        local setVarRet = debug.setlocal(ly , layerVarTab[i].index, newValue);
                        if setVarRet == varName then
                            this.printToConsole("[setVariable success1] 已设置 local ".. varName .. " = " .. tostring(newValue) );
                            ret = true;
                        else
                            this.printToConsole("[setVariable error1] 未能设置 local ".. varName .. " = " .. tostring(newValue).." , 返回结果: ".. tostring(setVarRet));
                        end
                        return ret;
                end
            else

                local setVarRet = debug.setlocal(ly , layerVarTab[i].index, newValue);

                if setVarRet == varName then
                    this.printToConsole("[setVariable success] 已设置 local ".. varName .. " = " .. tostring(newValue) );
                    ret = true;
                else
                    this.printToConsole("[setVariable error] 未能设置 local ".. varName .. " = " .. tostring(newValue) .." , 返回结果: ".. tostring(setVarRet));
                end
                return ret;
            end
        end
    end
    return ret;
end


-- 设置变量的值
-- @varName 被修改的变量名
-- @curStackId 调用栈层级(仅在固定栈层查找)
-- @newValue 新的值
-- @limit 限制符, 10000表示仅在局部变量查找 ,20000 global, 30000 upvalue
function this.setVariableValue (varName, stackId, newValue , limit)
    this.printToConsole("setVariableValue | varName:" .. tostring(varName) .. " stackId:".. tostring(stackId) .." newValue:" .. tostring(newValue) .." limit:"..tostring(limit) )
    if tostring(varName) == nil or tostring(varName) == "" then
        --赋值错误
        this.printToConsole("[setVariable Error] 被赋值的变量名为空", 2 );
        this.printToVSCode("[setVariable Error] 被赋值的变量名为空", 2 );
        return false;
    end

    --支持a.b.c形式。切割varName
    local tableVarName = {};
    if varName:match('%.') then
        tableVarName = this.stringSplit(varName , '%.');
        if type(tableVarName) ~= "table" or #tableVarName < 1 then
            return false;
        end
        varName = tableVarName[1];
    end

    if limit == "local" then
        local ret = this.setLocal( varName, newValue, tableVarName, stackId);
        return ret;
    elseif limit == "upvalue" then
        local ret = this.setUpvalue(varName, newValue, stackId, tableVarName);
        return ret
    elseif limit == "global" then
        local ret = this.setGlobal(varName, newValue);
        return ret;
    else
        local ret = this.setLocal( varName, newValue, tableVarName, stackId) or this.setUpvalue(varName, newValue, stackId, tableVarName) or this.setGlobal(varName, newValue);
        this.printToConsole("set Value res :".. tostring(ret));
        return ret;
    end
end

-- 按照local -> upvalue -> _G 顺序查找观察变量
-- @varName 用户输入的变量名
-- @stackId 调用栈层级(仅在固定栈层查找)
-- @isFormatVariable    是否把变量格式化为VSCode接收的形式
-- @return 查到返回信息,查不到返回nil
function this.getWatchedVariable( varName , stackId , isFormatVariable )
    this.printToConsole("getWatchedVariable | varName:" .. tostring(varName) .. " stackId:".. tostring(stackId) .." isFormatVariable:" .. tostring(isFormatVariable) )
    if tostring(varName) == nil or tostring(varName) == "" then
        return nil;
    end

    if type(currentCallStack[stackId - 1]) ~= "table" or  type(currentCallStack[stackId - 1].func) ~= "function" then
        local str = "getWatchedVariable currentCallStack " .. stackId - 1 .. " Error\n" .. this.serializeTable(currentCallStack, "currentCallStack");
        this.printToVSCode(str, 2);
        return nil;
    end

    --orgname 记录原名字. 用来处理a.b.c的形式
    local orgname = varName;
    --支持a.b.c形式。切割varName
    local tableVarName = {};
    if varName:match('%.') then
        tableVarName = this.stringSplit(varName , '%.');
        if type(tableVarName) ~= "table" or #tableVarName < 1 then
            return nil;
        end
        varName = tableVarName[1];
    end
    --用来返回,带有查到变量的table
    local varTab = {};
    local ly = this.getSpecificFunctionStackLevel(currentCallStack[stackId - 1].func);

    local layerVarTab = this.getVariable(ly, isFormatVariable);
    local upTable = this.getUpValueVariable(currentCallStack[stackId - 1 ].func, isFormatVariable);
    local travelTab = {};
    table.insert(travelTab, layerVarTab);
    table.insert(travelTab, upTable);
    for _, layerVarTab in ipairs(travelTab) do
        for i,realVar in ipairs(layerVarTab) do
            if realVar.name == varName then
                if #tableVarName > 0 and type(realVar) == "table" then
                    --处理a.b.c的table类型
                    local findRes = this.findTableVar(tableVarName,  variableRefTab[realVar.variablesReference]);
                    if findRes ~= nil then
                        --命中
                        if isFormatVariable then
                            local var = this.createWatchedVariableInfo( orgname , findRes );
                            table.insert(varTab, var);
                            return varTab;
                        else
                            return findRes.value;
                        end
                    end
                else
                    --命中
                    if isFormatVariable then
                        table.insert(varTab, realVar);
                        return varTab;
                    else
                        return realVar.value;
                    end
                end
            end
        end
    end

    --在全局变量_G中查找
    if _G[varName] ~= nil then
        --命中
        if #tableVarName > 0 and type(_G[varName]) == "table" then
            local findRes = this.findTableVar(tableVarName,  _G[varName]);
            if findRes ~= nil then
                if isFormatVariable then
                    local var = this.createWatchedVariableInfo( orgname , findRes );
                    table.insert(varTab, var);
                    return varTab;
                else
                    return findRes;
                end
            end
        else
            if isFormatVariable then
                local var = this.createWatchedVariableInfo( varName , _G[varName] );
                table.insert(varTab, var);
                return varTab;
            else
                return _G[varName];
            end
        end
    end
    this.printToConsole("getWatchedVariable not find variable");
    return nil;
end

-- 查询引用变量
-- @refStr 变量记录id(variableRefTab索引)
-- @return 格式化的变量信息table
function this.getVariableRef( refStr )
    local varRef = tonumber(refStr);
    local varTab = {};

    if tostring(type(variableRefTab[varRef])) == "table" then
        for n,v in pairs(variableRefTab[varRef]) do
            local var = {};
            if type(n) == "string" then
                var.name = '"' .. tostring(n) .. '"';
            else
                var.name = tostring(n);
            end
            var.type = tostring(type(v));
            xpcall(function() var.value = tostring(v) end , function() var.value = tostring(type(v)) .. " [value can't trans to string]" end );
            var.variablesReference = "0";
            if var.type == "table" or var.type == "function" or var.type == "userdata" then
                var.variablesReference = variableRefIdx;
                variableRefTab[variableRefIdx] = v;
                variableRefIdx = variableRefIdx + 1;
                if var.type == "table" then
                    local memberNum = this.getTableMemberNum(v);
                    var.value = memberNum .." Members ".. ( var.value or '' );
                end
            elseif var.type == "string" then
                var.value = '"' ..v.. '"';
            end
            table.insert(varTab, var);
        end
        --获取一下mtTable
        local mtTab = getmetatable(variableRefTab[varRef]);
        if mtTab ~= nil and type(mtTab) == "table" then
            local var = {};
            var.name = "_Metatable_";
            var.type = tostring(type(mtTab));
            xpcall(function() var.value = "元表 "..tostring(mtTab); end , function() var.value = "元表 [value can't trans to string]" end );
            var.variablesReference = variableRefIdx;
            variableRefTab[variableRefIdx] = mtTab;
            variableRefIdx = variableRefIdx + 1;
            table.insert(varTab, var);
        end
    elseif tostring(type(variableRefTab[varRef])) == "function" then
        --取upvalue
        varTab = this.getUpValueVariable(variableRefTab[varRef], true);
    elseif tostring(type(variableRefTab[varRef])) == "userdata" then
        --取mt table
        local udMtTable = getmetatable(variableRefTab[varRef]);
        if udMtTable ~= nil and type(udMtTable) == "table" then
            local var = {};
            var.name = "_Metatable_";
            var.type = tostring(type(udMtTable));
            xpcall(function() var.value = "元表 "..tostring(udMtTable); end , function() var.value = "元表 [value can't trans to string]" end );
            var.variablesReference = variableRefIdx;
            variableRefTab[variableRefIdx] = udMtTable;
            variableRefIdx = variableRefIdx + 1;
            table.insert(varTab, var);

            if traversalUserData and udMtTable.__pairs ~= nil and type(udMtTable.__pairs) == "function" then
                for n,v in pairs(variableRefTab[varRef]) do
                    local var = {};
                    var.name = tostring(n);
                    var.type = tostring(type(v));
                    xpcall(function() var.value = tostring(v) end , function() var.value = tostring(type(v)) .. " [value can't trans to string]" end );
                    var.variablesReference = "0";
                    if var.type == "table" or var.type == "function" or var.type == "userdata" then
                        var.variablesReference = variableRefIdx;
                        variableRefTab[variableRefIdx] = v;
                        variableRefIdx = variableRefIdx + 1;
                        if var.type == "table" then
                            local memberNum = this.getTableMemberNum(v);
                            var.value = memberNum .." Members ".. ( var.value or '' );
                        end
                    elseif var.type == "string" then
                        var.value = '"' ..v.. '"';
                    end
                    table.insert(varTab, var);
                end
            end
        end
    end
    return varTab;
end

-- 获取全局变量。方法和内存管理中获取全局变量的方法一样
-- @return 格式化的信息, 若未找到返回空table
function this.getGlobalVariable( ... )
    --成本比较高,这里只能遍历_G中的所有变量,并去除系统变量,再返回给客户端
    local varTab = {};
    for k,v in pairs(_G) do
        local var = {};
        var.name = tostring(k);
        var.type = tostring(type(v));
        xpcall(function() var.value = tostring(v) end , function() var.value =  tostring(type(v)) .." [value can't trans to string]" end );
        var.variablesReference = "0";
        if var.type == "table" or var.type == "function" or var.type == "userdata" then
            var.variablesReference = variableRefIdx;
            variableRefTab[variableRefIdx] = v;
            variableRefIdx = variableRefIdx + 1;
            if var.type == "table" then
                local memberNum = this.getTableMemberNum(v);
                var.value = memberNum .." Members ".. ( var.value or '' );
            end
        elseif var.type == "string" then
            var.value = '"' ..v.. '"';
        end
        table.insert(varTab, var);
    end
    return varTab;
end

-- 获取upValues
-- @isFormatVariable  true返回[值]  true返回[格式化的数据]
function this.getUpValueVariable( checkFunc , isFormatVariable)
    local isGetValue = true;
    if isFormatVariable == true then
        isGetValue = false;
    end

    --通过Debug获取当前函数的Func
    checkFunc = checkFunc or lastRunFunction.func;

    local varTab = {};
    if checkFunc == nil then
        return varTab;
    end
    local i = 1
    repeat
        local n, v = debug.getupvalue(checkFunc, i)
        if n then

        local var = {};
        var.name = n;
        var.type = tostring(type(v));
        var.variablesReference = "0";

        if isGetValue == false then
            xpcall(function() var.value = tostring(v) end , function() var.value = tostring(type(v)) .. " [value can't trans to string]" end );
            if var.type == "table" or var.type == "function" or var.type == "userdata" then
                var.variablesReference = variableRefIdx;
                variableRefTab[variableRefIdx] = v;
                variableRefIdx = variableRefIdx + 1;
                if var.type == "table" then
                    local memberNum = this.getTableMemberNum(v);
                    var.value = memberNum .." Members ".. ( var.value or '' );
                end
            elseif var.type == "string" then
                var.value = '"' ..v.. '"';
            end
        else
            var.value = v;
        end

        table.insert(varTab, var);
        i = i + 1
        end
    until not n
    return varTab;
end

-- 获取局部变量 checkLayer是要查询的层级,如果不设置则查询当前层级
-- @isFormatVariable 是否取值,true:取值的tostring
function this.getVariable( checkLayer, isFormatVariable , offset)
    local isGetValue = true;
    if isFormatVariable == true then
        isGetValue = false;
    end

    local ly = 0;
    if checkLayer ~= nil and type(checkLayer) == "number" then ly = checkLayer + 1;
    else  ly = this.getSpecificFunctionStackLevel(lastRunFunction.func); end

    if ly == 0 then
        this.printToVSCode("[error]获取层次失败!", 2);
        return;
    end
    local varTab = {};
    local stacklayer = ly;
    local k = 1;

    if type(offset) == 'number' then
        stacklayer = stacklayer + offset;
    end

    repeat
        local n, v = debug.getlocal(stacklayer, k)
        if n == nil then
            break;
        end

        --(*temporary)是系统变量,过滤掉。这里假设(*temporary)仅出现在最后
        if "(*temporary)" ~= tostring(n) then
            local var = {};
            var.name = n;
            var.type = tostring(type(v));
            var.variablesReference = "0";
            var.index = k;

            if isGetValue == false then
                xpcall(function() var.value = tostring(v) end , function() var.value = tostring(type(v)) .. " [value can't trans to string]" end );
                if var.type == "table" or var.type == "function" or var.type == "userdata" then
                    var.variablesReference = variableRefIdx;
                    variableRefTab[variableRefIdx] = v;
                    variableRefIdx = variableRefIdx + 1;
                    if var.type == "table" then
                        local memberNum = this.getTableMemberNum(v);
                        var.value = memberNum .." Members ".. ( var.value or '' );
                    end
                elseif var.type == "string" then
                        var.value = '"' ..v.. '"';
                end
            else
                var.value = v;
            end

            local sameIdx = this.checkSameNameVar(varTab, var);
            if sameIdx ~= 0 then
                varTab[sameIdx] = var;
            else
                table.insert(varTab, var);
            end
        end
        k = k + 1
    until n == nil
    return varTab, stacklayer - 1;
end

--检查变量列表中的同名变量
function this.checkSameNameVar(varTab, var)
    for k , v in pairs(varTab) do
        if v.name == var.name then
            return k;
        end
    end
    return 0;
end

-- 执行表达式
function this.processExp(msgTable)
    local retString;
    local var = {};
    var.isSuccess = "true";
    if msgTable ~= nil then
        local expression = this.trim(tostring(msgTable.Expression));
        local isCmd = false;
        if isCmd == false then
            --兼容旧版p 命令
            if expression:find("p ", 1, true) == 1 then
                expression = expression:sub(3);
            end

            local expressionWithReturn = "return " .. expression;
            local f = debugger_loadString(expressionWithReturn) or debugger_loadString(expression);
            --判断结果,如果表达式错误会返回nil
            if type(f) == "function" then
                if _VERSION == "Lua 5.1" then
                    setfenv(f , env);
                else
                    debug.setupvalue(f, 1, env);
                end
                --表达式要有错误处理
                xpcall(function() retString = f() end , function() retString = "输入错误指令。\n + 请检查指令是否正确\n + 指令仅能在[暂停在断点时]输入, 请不要在程序持续运行时输入"; var.isSuccess = false; end)
            else
                retString = "指令执行错误。\n + 请检查指令是否正确\n + 可以直接输入表达式,执行函数或变量名,并观察执行结果";
                var.isSuccess = false;
            end
        end
    end

    var.name = "Exp";
    var.type = tostring(type(retString));
    xpcall(function() var.value = tostring(retString) end , function(e) var.value = tostring(type(retString))  .. " [value can't trans to string] ".. e; var.isSuccess = false; end);
    var.variablesReference = "0";
    if var.type == "table" or var.type == "function" or var.type == "userdata" then
        variableRefTab[variableRefIdx] = retString;
        var.variablesReference = variableRefIdx;
        variableRefIdx = variableRefIdx + 1;
        if var.type == "table" then
            local memberNum = this.getTableMemberNum(retString);
            var.value = memberNum .." Members ".. var.value;
        end
    elseif var.type == "string" then
        var.value = '"' ..retString.. '"';
    end
    --string执行完毕后清空env环境
    this.clearEnv();
    local retTab = {}
    table.insert(retTab ,var);
    return retTab;
end

--执行变量观察表达式
function this.processWatchedExp(msgTable)
    local retString;
    local expression = "return ".. tostring(msgTable.varName)
    this.printToConsole("processWatchedExp | expression: " .. expression);
    local f = debugger_loadString(expression);
    local var = {};
    var.isSuccess = "true";
    --判断结果,如果表达式错误会返回nil
    if type(f) == "function" then
        --表达式正确
        if _VERSION == "Lua 5.1" then
            setfenv(f , env);
        else
            debug.setupvalue(f, 1, env);
        end
        xpcall(function() retString = f() end , function() retString = "输入了错误的变量信息"; var.isSuccess = "false"; end)
    else
        retString = "未能找到变量的值";
        var.isSuccess = "false";
    end

    var.name = msgTable.varName;
    var.type = tostring(type(retString));
    xpcall(function() var.value = tostring(retString) end , function() var.value = tostring(type(retString)) .. " [value can't trans to string]"; var.isSuccess = "false"; end );
    var.variablesReference = "0";

    if var.type == "table" or var.type == "function" or var.type == "userdata" then
        variableRefTab[variableRefIdx] = retString;
        var.variablesReference = variableRefIdx;
        variableRefIdx = variableRefIdx + 1;
        if var.type == "table" then
            local memberNum = this.getTableMemberNum(retString);
            var.value = memberNum .." Members ".. var.value;
        end
    elseif var.type == "string" then
        var.value = '"' ..retString.. '"';
    end

    local retTab = {}
    table.insert(retTab ,var);
    return retTab;
end


function tools.getFileSource()
    local info = debug.getinfo(1, "S")
    for k,v in pairs(info) do
        if k == "source" then
            return v;
        end
    end
end

--序列化并打印table
function tools.printTable(t, name ,indent)
    local str = (tools.show(t, name, indent));
    print(str);
end

--序列化并返回table
function tools.serializeTable(t, name, indent)
  local str = (tools.show(t, name, indent))
  return str
end

--[[
Author: Julio Manuel Fernandez-Diaz
Date:   January 12, 2007
Modified slightly by RiciLake to avoid the unnecessary table traversal in tablecount()
Formats tables with cycles recursively to any depth.
The output is returned as a string.
References to other tables are shown as values.
Self references are indicated.
The string returned is "Lua code", which can be procesed
(in the case in which indent is composed by spaces or "--").
Userdata and function keys and values are shown as strings,
which logically are exactly not equivalent to the original code.
This routine can serve for pretty formating tables with
proper indentations, apart from printing them:
print(table.show(t, "t"))   -- a typical use
Heavily based on "Saving tables with cycles", PIL2, p. 113.
Arguments:
t is the table.
name is the name of the table (optional)
indent is a first indentation (optional).
--]]
function tools.show(t, name, indent)
    local cart     -- a container
    local autoref  -- for self references

    local function isemptytable(t) return next(t) == nil end

    local function basicSerialize (o)
      local so = tostring(o)
      if type(o) == "function" then
         local info = debug.getinfo(o, "S")
         -- info.name is nil because o is not a calling level
         if info.what == "C" then
            return string.format("%q", so .. ", C function")
         else
            -- the information is defined through lines
            return string.format("%q", so .. ", defined in (" ..
                info.linedefined .. "-" .. info.lastlinedefined ..
                ")" .. info.source)
         end
      elseif type(o) == "number" or type(o) == "boolean" then
         return so
      else
         return string.format("%q", so)
      end
    end

    local function addtocart (value, name, indent, saved, field)
      indent = indent or ""
      saved = saved or {}
      field = field or name

      cart = cart .. indent .. field

      if type(value) ~= "table" then
         cart = cart .. " = " .. basicSerialize(value) .. ";\n"
      else
         if saved[value] then
            cart = cart .. " = {}; -- " .. saved[value]
                        .. " (self reference)\n"
            autoref = autoref ..  name .. " = " .. saved[value] .. ";\n"
         else
            saved[value] = name
            --if tablecount(value) == 0 then
            if isemptytable(value) then
               cart = cart .. " = {};\n"
            else
               cart = cart .. " = {\n"
               for k, v in pairs(value) do
                  k = basicSerialize(k)
                  local fname = string.format("%s[%s]", name, k)
                  field = string.format("[%s]", k)
                  -- three spaces between levels
                  addtocart(v, fname, indent .. "   ", saved, field)
               end
               cart = cart .. indent .. "};\n"
            end
         end
      end
    end

    name = name or "PRINT_Table"
    if type(t) ~= "table" then
      return name .. " = " .. basicSerialize(t)
    end
    cart, autoref = "", ""
    addtocart(t, name, indent)
    return cart .. autoref
end

-----------------------------------------------------------------------------
-- JSON4Lua: JSON encoding / decoding support for the Lua language.
-- json Module.
-- Author: Craig Mason-Jones
-- Homepage: http://github.com/craigmj/json4lua/
-- Version: 1.0.0
-- This module is released under the MIT License (MIT).
-- Please see LICENCE.txt for details.
--
-- USAGE:
-- This module exposes two functions:
--   json.encode(o)
--     Returns the table / string / boolean / number / nil / json.null value as a JSON-encoded string.
--   json.decode(json_string)
--     Returns a Lua object populated with the data encoded in the JSON string json_string.
--
-- REQUIREMENTS:
--   compat-5.1 if using Lua 5.0
--
-- CHANGELOG
--   0.9.20 Introduction of local Lua functions for private functions (removed _ function prefix).
--          Fixed Lua 5.1 compatibility issues.
--   		Introduced json.null to have null values in associative arrays.
--          json.encode() performance improvement (more than 50%) through table.concat rather than ..
--          Introduced decode ability to ignore /**/ comments in the JSON string.
--   0.9.10 Fix to array encoding / decoding to correctly manage nil/null values in arrays.
-----------------------------------------------------------------------------

function tools.createJson()
    -----------------------------------------------------------------------------
    -- Imports and dependencies
    -----------------------------------------------------------------------------
    local math = require('math')
    local string = require("string")
    local table = require("table")

    -----------------------------------------------------------------------------
    -- Module declaration
    -----------------------------------------------------------------------------
    local json = {}             -- Public namespace
    local json_private = {}     -- Private namespace

    -- Public constants
    json.EMPTY_ARRAY={}
    json.EMPTY_OBJECT={}

    -- Public functions

    -- Private functions
    local decode_scanArray
    local decode_scanComment
    local decode_scanConstant
    local decode_scanNumber
    local decode_scanObject
    local decode_scanString
    local decode_scanWhitespace
    local encodeString
    local isArray
    local isEncodable

    -----------------------------------------------------------------------------
    -- PUBLIC FUNCTIONS
    -----------------------------------------------------------------------------
    --- Encodes an arbitrary Lua object / variable.
    -- @param v The Lua object / variable to be JSON encoded.
    -- @return String containing the JSON encoding in internal Lua string format (i.e. not unicode)
    function json.encode (v)
        -- Handle nil values
        if v==nil then
            return "null"
        end

        local vtype = type(v)

        -- Handle strings
        if vtype=='string' then
            return '"' .. json_private.encodeString(v) .. '"'	    -- Need to handle encoding in string
        end

        -- Handle booleans
        if vtype=='number' or vtype=='boolean' then
            return tostring(v)
        end

        -- Handle tables
        if vtype=='table' then
            local rval = {}
            -- Consider arrays separately
            local bArray, maxCount = isArray(v)
            if bArray then
                for i = 1,maxCount do
                    table.insert(rval, json.encode(v[i]))
                end
            else	-- An object, not an array
                for i,j in pairs(v) do
                    if isEncodable(i) and isEncodable(j) then
                        table.insert(rval, '"' .. json_private.encodeString(i) .. '":' .. json.encode(j))
                    end
                end
            end
            if bArray then
                return '[' .. table.concat(rval,',') ..']'
            else
                return '{' .. table.concat(rval,',') .. '}'
            end
        end

        -- Handle null values
        if vtype=='function' and v==json.null then
            return 'null'
        end

        assert(false,'encode attempt to encode unsupported type ' .. vtype .. ':' .. tostring(v))
    end


    --- Decodes a JSON string and returns the decoded value as a Lua data structure / value.
    -- @param s The string to scan.
    -- @param [startPos] Optional starting position where the JSON string is located. Defaults to 1.
    -- @param Lua object, number The object that was scanned, as a Lua table / string / number / boolean or nil,
    -- and the position of the first character after
    -- the scanned JSON object.
    function json.decode(s, startPos)
        startPos = startPos and startPos or 1
        startPos = decode_scanWhitespace(s,startPos)
        assert(startPos<=string.len(s), 'Unterminated JSON encoded object found at position in [' .. s .. ']')
        local curChar = string.sub(s,startPos,startPos)
        -- Object
        if curChar=='{' then
            return decode_scanObject(s,startPos)
        end
        -- Array
        if curChar=='[' then
            return decode_scanArray(s,startPos)
        end
        -- Number
        if string.find("+-0123456789.e", curChar, 1, true) then
            return decode_scanNumber(s,startPos)
        end
        -- String
        if curChar==[["]] or curChar==[[']] then
            return decode_scanString(s,startPos)
        end
        if string.sub(s,startPos,startPos+1)=='/*' then
            return json.decode(s, decode_scanComment(s,startPos))
        end
        -- Otherwise, it must be a constant
        return decode_scanConstant(s,startPos)
    end

    --- The null function allows one to specify a null value in an associative array (which is otherwise
    -- discarded if you set the value with 'nil' in Lua. Simply set t = { first=json.null }
    function json.null()
        return json.null -- so json.null() will also return null ;-)
    end
    -----------------------------------------------------------------------------
    -- Internal, PRIVATE functions.
    -- Following a Python-like convention, I have prefixed all these 'PRIVATE'
    -- functions with an underscore.
    -----------------------------------------------------------------------------

    --- Scans an array from JSON into a Lua object
    -- startPos begins at the start of the array.
    -- Returns the array and the next starting position
    -- @param s The string being scanned.
    -- @param startPos The starting position for the scan.
    -- @return table, int The scanned array as a table, and the position of the next character to scan.
    function decode_scanArray(s,startPos)
        local array = {}	-- The return value
        local stringLen = string.len(s)
        assert(string.sub(s,startPos,startPos)=='[','decode_scanArray called but array does not start at position ' .. startPos .. ' in string:\n'..s )
        startPos = startPos + 1
        -- Infinite loop for array elements
        local index = 1
        repeat
            startPos = decode_scanWhitespace(s,startPos)
            assert(startPos<=stringLen,'JSON String ended unexpectedly scanning array.')
            local curChar = string.sub(s,startPos,startPos)
            if (curChar==']') then
                return array, startPos+1
            end
            if (curChar==',') then
                startPos = decode_scanWhitespace(s,startPos+1)
            end
            assert(startPos<=stringLen, 'JSON String ended unexpectedly scanning array.')
            local object
            object, startPos = json.decode(s,startPos)
            array[index] = object
            index = index + 1
        until false
    end

    --- Scans a comment and discards the comment.
    -- Returns the position of the next character following the comment.
    -- @param string s The JSON string to scan.
    -- @param int startPos The starting position of the comment
    function decode_scanComment(s, startPos)
        assert( string.sub(s,startPos,startPos+1)=='/*', "decode_scanComment called but comment does not start at position " .. startPos)
        local endPos = string.find(s,'*/',startPos+2)
        assert(endPos~=nil, "Unterminated comment in string at " .. startPos)
        return endPos+2
    end

    --- Scans for given constants: true, false or null
    -- Returns the appropriate Lua type, and the position of the next character to read.
    -- @param s The string being scanned.
    -- @param startPos The position in the string at which to start scanning.
    -- @return object, int The object (true, false or nil) and the position at which the next character should be
    -- scanned.
    function decode_scanConstant(s, startPos)
        local consts = { ["true"] = true, ["false"] = false, ["null"] = nil }
        local constNames = {"true","false","null"}

        for i,k in pairs(constNames) do
            if string.sub(s,startPos, startPos + string.len(k) -1 )==k then
                return consts[k], startPos + string.len(k)
            end
        end
        assert(nil, 'Failed to scan constant from string ' .. s .. ' at starting position ' .. startPos)
    end

    --- Scans a number from the JSON encoded string.
    -- (in fact, also is able to scan numeric +- eqns, which is not
    -- in the JSON spec.)
    -- Returns the number, and the position of the next character
    -- after the number.
    -- @param s The string being scanned.
    -- @param startPos The position at which to start scanning.
    -- @return number, int The extracted number and the position of the next character to scan.
    function decode_scanNumber(s,startPos)
        local endPos = startPos+1
        local stringLen = string.len(s)
        local acceptableChars = "+-0123456789.e"
        while (string.find(acceptableChars, string.sub(s,endPos,endPos), 1, true)
        and endPos<=stringLen
        ) do
            endPos = endPos + 1
        end
        -- local stringValue = 'return ' .. string.sub(s, startPos, endPos - 1)
        -- local stringEval = loadstring(stringValue)
        -- assert(stringEval, 'Failed to scan number [ ' .. stringValue .. '] in JSON string at position ' .. startPos .. ' : ' .. endPos)
        local numberValue = string.sub(s, startPos, endPos - 1)
        return numberValue, endPos
    end

    --- Scans a JSON object into a Lua object.
    -- startPos begins at the start of the object.
    -- Returns the object and the next starting position.
    -- @param s The string being scanned.
    -- @param startPos The starting position of the scan.
    -- @return table, int The scanned object as a table and the position of the next character to scan.
    function decode_scanObject(s,startPos)
        local object = {}
        local stringLen = string.len(s)
        local key, value
        assert(string.sub(s,startPos,startPos)=='{','decode_scanObject called but object does not start at position ' .. startPos .. ' in string:\n' .. s)
        startPos = startPos + 1
        repeat
            startPos = decode_scanWhitespace(s,startPos)
            assert(startPos<=stringLen, 'JSON string ended unexpectedly while scanning object.')
            local curChar = string.sub(s,startPos,startPos)
            if (curChar=='}') then
                return object,startPos+1
            end
            if (curChar==',') then
                startPos = decode_scanWhitespace(s,startPos+1)
            end
            assert(startPos<=stringLen, 'JSON string ended unexpectedly scanning object.')
            -- Scan the key
            key, startPos = json.decode(s,startPos)
            assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key)
            startPos = decode_scanWhitespace(s,startPos)
            assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key)
            assert(string.sub(s,startPos,startPos)==':','JSON object key-value assignment mal-formed at ' .. startPos)
            startPos = decode_scanWhitespace(s,startPos+1)
            assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key)
            value, startPos = json.decode(s,startPos)
            object[key]=value
        until false	-- infinite loop while key-value pairs are found
    end

    -- START SoniEx2
    -- Initialize some things used by decode_scanString
    -- You know, for efficiency
    local escapeSequences = {
        ["\\t"] = "\t",
        ["\\f"] = "\f",
        ["\\r"] = "\r",
        ["\\n"] = "\n",
        ["\\b"] = "\b"
    }
    setmetatable(escapeSequences, {__index = function(t,k)
        -- skip "\" aka strip escape
        return string.sub(k,2)
    end})
    -- END SoniEx2

    --- Scans a JSON string from the opening inverted comma or single quote to the
    -- end of the string.
    -- Returns the string extracted as a Lua string,
    -- and the position of the next non-string character
    -- (after the closing inverted comma or single quote).
    -- @param s The string being scanned.
    -- @param startPos The starting position of the scan.
    -- @return string, int The extracted string as a Lua string, and the next character to parse.
    function decode_scanString(s,startPos)
        assert(startPos, 'decode_scanString(..) called without start position')
        local startChar = string.sub(s,startPos,startPos)
        -- START SoniEx2
        -- PS: I don't think single quotes are valid JSON
        assert(startChar == [["]] or startChar == [[']],'decode_scanString called for a non-string')
        --assert(startPos, "String decoding failed: missing closing " .. startChar .. " for string at position " .. oldStart)
        local t = {}
        local i,j = startPos,startPos
        while string.find(s, startChar, j+1) ~= j+1 do
            local oldj = j
            i,j = string.find(s, "\\.", j+1)
            local x,y = string.find(s, startChar, oldj+1)
            if not i or x < i then
                i,j = x,y-1
            end
            table.insert(t, string.sub(s, oldj+1, i-1))
            if string.sub(s, i, j) == "\\u" then
                local a = string.sub(s,j+1,j+4)
                j = j + 4
                local n = tonumber(a, 16)
                assert(n, "String decoding failed: bad Unicode escape " .. a .. " at position " .. i .. " : " .. j)
                -- math.floor(x/2^y) == lazy right shift
                -- a % 2^b == bitwise_and(a, (2^b)-1)
                -- 64 = 2^6
                -- 4096 = 2^12 (or 2^6 * 2^6)
                local x
                if n < 0x80 then
                    x = string.char(n % 0x80)
                elseif n < 0x800 then
                    -- [110x xxxx] [10xx xxxx]
                    x = string.char(0xC0 + (math.floor(n/64) % 0x20), 0x80 + (n % 0x40))
                else
                    -- [1110 xxxx] [10xx xxxx] [10xx xxxx]
                    x = string.char(0xE0 + (math.floor(n/4096) % 0x10), 0x80 + (math.floor(n/64) % 0x40), 0x80 + (n % 0x40))
                end
                table.insert(t, x)
            else
                table.insert(t, escapeSequences[string.sub(s, i, j)])
            end
        end
        table.insert(t,string.sub(j, j+1))
        assert(string.find(s, startChar, j+1), "String decoding failed: missing closing " .. startChar .. " at position " .. j .. "(for string at position " .. startPos .. ")")
        return table.concat(t,""), j+2
        -- END SoniEx2
    end

    --- Scans a JSON string skipping all whitespace from the current start position.
    -- Returns the position of the first non-whitespace character, or nil if the whole end of string is reached.
    -- @param s The string being scanned
    -- @param startPos The starting position where we should begin removing whitespace.
    -- @return int The first position where non-whitespace was encountered, or string.len(s)+1 if the end of string
    -- was reached.
    function decode_scanWhitespace(s,startPos)
        local whitespace=" \n\r\t"
        local stringLen = string.len(s)
        while ( string.find(whitespace, string.sub(s,startPos,startPos), 1, true)  and startPos <= stringLen) do
            startPos = startPos + 1
        end
        return startPos
    end

    --- Encodes a string to be JSON-compatible.
    -- This just involves back-quoting inverted commas, back-quotes and newlines, I think ;-)
    -- @param s The string to return as a JSON encoded (i.e. backquoted string)
    -- @return The string appropriately escaped.

    local escapeList = {
            ['"']  = '\\"',
            ['\\'] = '\\\\',
            ['/']  = '\\/',
            ['\b'] = '\\b',
            ['\f'] = '\\f',
            ['\n'] = '\\n',
            ['\r'] = '\\r',
            ['\t'] = '\\t'
    }

    function json_private.encodeString(s)
    local s = tostring(s)
    return s:gsub(".", function(c) return escapeList[c] end) -- SoniEx2: 5.0 compat
    end

    -- Determines whether the given Lua type is an array or a table / dictionary.
    -- We consider any table an array if it has indexes 1..n for its n items, and no
    -- other data in the table.
    -- I think this method is currently a little 'flaky', but can't think of a good way around it yet...
    -- @param t The table to evaluate as an array
    -- @return boolean, number True if the table can be represented as an array, false otherwise. If true,
    -- the second returned value is the maximum
    -- number of indexed elements in the array.
    function isArray(t)
        -- Next we count all the elements, ensuring that any non-indexed elements are not-encodable
        -- (with the possible exception of 'n')
        if (t == json.EMPTY_ARRAY) then return true, 0 end
        if (t == json.EMPTY_OBJECT) then return false end

        local maxIndex = 0
        for k,v in pairs(t) do
            if (type(k)=='number' and math.floor(k)==k and 1<=k) then	-- k,v is an indexed pair
                if (not isEncodable(v)) then return false end	-- All array elements must be encodable
                maxIndex = math.max(maxIndex,k)
            else
                if (k=='n') then
                    if v ~= (t.n or #t) then return false end  -- False if n does not hold the number of elements
                else -- Else of (k=='n')
                    if isEncodable(v) then return false end
                end  -- End of (k~='n')
            end -- End of k,v not an indexed pair
        end  -- End of loop across all pairs
        return true, maxIndex
    end

    --- Determines whether the given Lua object / table / variable can be JSON encoded. The only
    -- types that are JSON encodable are: string, boolean, number, nil, table and json.null.
    -- In this implementation, all other types are ignored.
    -- @param o The object to examine.
    -- @return boolean True if the object should be JSON encoded, false if it should be ignored.
    function isEncodable(o)
        local t = type(o)
        return (t=='string' or t=='boolean' or t=='number' or t=='nil' or t=='table') or
            (t=='function' and o==json.null)
    end
    return json
end

-- Sourced from http://lua-users.org/wiki/BaseSixtyFour

-- Lua 5.1+ base64 v3.0 (c) 2009 by Alex Kloss <alexthkloss@web.de>
-- licensed under the terms of the LGPL2

-- character table string
local base64CharTable='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

-- encoding
function tools.base64encode(data)
    return ((data:gsub('.', function(x)
        local r,b='',x:byte()
        for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end
        return r;
    end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
        if (#x < 6) then return '' end
        local c=0
        for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end
        return base64CharTable:sub(c+1,c+1)
    end)..({ '', '==', '=' })[#data%3+1])
end

-- decoding
function tools.base64decode(data)
    data = string.gsub(data, '[^'..base64CharTable..'=]', '')
    return (data:gsub('.', function(x)
        if (x == '=') then return '' end
        local r,f='',(base64CharTable:find(x)-1)
        for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end
        return r;
    end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x)
        if (#x ~= 8) then return '' end
        local c=0
        for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end
        return string.char(c)
    end))
end

-- tools变量
json = tools.createJson(); --json处理
this.printToConsole("load LuaPanda success", 1);
this.replaceCoroutineFuncs()
return this;

================================================
FILE: core/bin/server/lua/MemoryReferenceInfo.lua
================================================
--
-- Collect memory reference info.
--
-- @filename  MemoryReferenceInfo.lua
-- @author    WangYaoqi
-- @date      2016-02-03

-- The global config of the mri.
local cConfig = 
{
    m_bAllMemoryRefFileAddTime = true,
    m_bSingleMemoryRefFileAddTime = true,
    m_bComparedMemoryRefFileAddTime = true
}

-- Get the format string of date time.
local function FormatDateTimeNow()
	local cDateTime = os.date("*t")
	local strDateTime = string.format("%04d%02d%02d-%02d%02d%02d", tostring(cDateTime.year), tostring(cDateTime.month), tostring(cDateTime.day),
		tostring(cDateTime.hour), tostring(cDateTime.min), tostring(cDateTime.sec))
	return strDateTime
end

-- Get the string result without overrided __tostring.
local function GetOriginalToStringResult(cObject)
	if not cObject then
		return ""
	end

	local cMt = getmetatable(cObject)
	if not cMt then
		return tostring(cObject)
	end

	-- Check tostring override.
	local strName = ""
	local cToString = rawget(cMt, "__tostring")
	if cToString then
		rawset(cMt, "__tostring", nil)
		strName = tostring(cObject)
		rawset(cMt, "__tostring", cToString)
	else
		strName = tostring(cObject)
	end

	return strName
end

-- Create a container to collect the mem ref info results.
local function CreateObjectReferenceInfoContainer()
	-- Create new container.
	local cContainer = {}

	-- Contain [table/function] - [reference count] info.
	local cObjectReferenceCount = {}
	setmetatable(cObjectReferenceCount, {__mode = "k"})

	-- Contain [table/function] - [name] info.
	local cObjectAddressToName = {}
	setmetatable(cObjectAddressToName, {__mode = "k"})

	-- Set members.
	cContainer.m_cObjectReferenceCount = cObjectReferenceCount
	cContainer.m_cObjectAddressToName = cObjectAddressToName

	-- For stack info.
	cContainer.m_nStackLevel = -1
	cContainer.m_strShortSrc = "None"
	cContainer.m_nCurrentLine = -1

	return cContainer
end

-- Create a container to collect the mem ref info results from a dumped file.
-- strFilePath - The file path.
local function CreateObjectReferenceInfoContainerFromFile(strFilePath)
	-- Create a empty container.
	local cContainer = CreateObjectReferenceInfoContainer()
	cContainer.m_strShortSrc = strFilePath

	-- Cache ref info.
	local cRefInfo = cContainer.m_cObjectReferenceCount
	local cNameInfo = cContainer.m_cObjectAddressToName

	-- Read each line from file.
	local cFile = assert(io.open(strFilePath, "rb"))
	for strLine in cFile:lines() do
		local strHeader = string.sub(strLine, 1, 2)
		if "--" ~= strHeader then
			local _, _, strAddr, strName, strRefCount= string.find(strLine, "(.+)\t(.*)\t(%d+)")
			if strAddr then
				cRefInfo[strAddr] = strRefCount
				cNameInfo[strAddr] = strName
			end
		end
	end

    -- Close and clear file handler.
    io.close(cFile)
    cFile = nil

	return cContainer
end

-- Create a container to collect the mem ref info results from a dumped file.
-- strObjectName - The object name you need to collect info.
-- cObject - The object you need to collect info.
local function CreateSingleObjectReferenceInfoContainer(strObjectName, cObject)
	-- Create new container.
	local cContainer = {}

	-- Contain [address] - [true] info.
	local cObjectExistTag = {}
	setmetatable(cObjectExistTag, {__mode = "k"})

	-- Contain [name] - [true] info.
	local cObjectAliasName = {}

	-- Contain [access] - [true] info.
	local cObjectAccessTag = {}
	setmetatable(cObjectAccessTag, {__mode = "k"})

	-- Set members.
	cContainer.m_cObjectExistTag = cObjectExistTag
	cContainer.m_cObjectAliasName = cObjectAliasName
	cContainer.m_cObjectAccessTag = cObjectAccessTag

	-- For stack info.
	cContainer.m_nStackLevel = -1
	cContainer.m_strShortSrc = "None"
	cContainer.m_nCurrentLine = -1

	-- Init with object values.
	cContainer.m_strObjectName = strObjectName
	cContainer.m_strAddressName = (("string" == type(cObject)) and ("\"" .. tostring(cObject) .. "\"")) or GetOriginalToStringResult(cObject)
	cContainer.m_cObjectExistTag[cObject] = true

	return cContainer
end

-- Collect memory reference info from a root table or function.
-- strName - The root object name that start to search, default is "_G" if leave this to nil.
-- cObject - The root object that start to search, default is _G if leave this to nil.
-- cDumpInfoContainer - The container of the dump result info.
local function CollectObjectReferenceInMemory(strName, cObject, cDumpInfoContainer)
	if not cObject then
		return
	end

	if not strName then
		strName = ""
	end

	-- Check container.
	if (not cDumpInfoContainer) then
		cDumpInfoContainer = CreateObjectReferenceInfoContainer()
	end

	-- Check stack.
	if cDumpInfoContainer.m_nStackLevel > 0 then
		local cStackInfo = debug.getinfo(cDumpInfoContainer.m_nStackLevel, "Sl")
		if cStackInfo then
			cDumpInfoContainer.m_strShortSrc = cStackInfo.short_src
			cDumpInfoContainer.m_nCurrentLine = cStackInfo.currentline
		end

		cDumpInfoContainer.m_nStackLevel = -1
	end

	-- Get ref and name info.
	local cRefInfoContainer = cDumpInfoContainer.m_cObjectReferenceCount
	local cNameInfoContainer = cDumpInfoContainer.m_cObjectAddressToName
	
	local strType = type(cObject)
	if "table" == strType then
		-- Check table with class name.
		if rawget(cObject, "__cname") then
			if "string" == type(cObject.__cname) then
				strName = strName .. "[class:" .. cObject.__cname .. "]"
			end
		elseif rawget(cObject, "class") then
			if "string" == type(cObject.class) then
				strName = strName .. "[class:" .. cObject.class .. "]"
			end
		elseif rawget(cObject, "_className") then
			if "string" == type(cObject._className) then
				strName = strName .. "[class:" .. cObject._className .. "]"
			end
		end

		-- Check if table is _G.
		if cObject == _G then
			strName = strName .. "[_G]"
		end

		-- Get metatable.
		local bWeakK = false
		local bWeakV = false
		local cMt = getmetatable(cObject)
		if cMt then
			-- Check mode.
			local strMode = rawget(cMt, "__mode")
			if strMode then
				if "k" == strMode then
					bWeakK = true
				elseif "v" == strMode then
					bWeakV = true
				elseif "kv" == strMode then
					bWeakK = true
					bWeakV = true
				end
			end
		end

		-- Add reference and name.
		cRefInfoContainer[cObject] = (cRefInfoContainer[cObject] and (cRefInfoContainer[cObject] + 1)) or 1
		if cNameInfoContainer[cObject] then
			return
		end

		-- Set name.
		cNameInfoContainer[cObject] = strName

		-- Dump table key and value.
		for k, v in pairs(cObject) do
			-- Check key type.
			local strKeyType = type(k)
			if "table" == strKeyType then
				if not bWeakK then
					CollectObjectReferenceInMemory(strName .. ".[table:key.table]", k, cDumpInfoContainer)
				end

				if not bWeakV then
					CollectObjectReferenceInMemory(strName .. ".[table:value]", v, cDumpInfoContainer)
				end
			elseif "function" == strKeyType then
				if not bWeakK then
					CollectObjectReferenceInMemory(strName .. ".[table:key.function]", k, cDumpInfoContainer)
				end

				if not bWeakV then
					CollectObjectReferenceInMemory(strName .. ".[table:value]", v, cDumpInfoContainer)
				end
			elseif "thread" == strKeyType then
				if not bWeakK then
					CollectObjectReferenceInMemory(strName .. ".[table:key.thread]", k, cDumpInfoContainer)
				end

				if not bWeakV then
					CollectObjectReferenceInMemory(strName .. ".[table:value]", v, cDumpInfoContainer)
				end
			elseif "userdata" == strKeyType then
				if not bWeakK then
					CollectObjectReferenceInMemory(strName .. ".[table:key.userdata]", k, cDumpInfoContainer)
				end

				if not bWeakV then
					CollectObjectReferenceInMemory(strName .. ".[table:value]", v, cDumpInfoContainer)
				end
			else
				CollectObjectReferenceInMemory(strName .. "." .. k, v, cDumpInfoContainer)
			end
		end

		-- Dump metatable.
		if cMt then
			CollectObjectReferenceInMemory(strName ..".[metatable]", cMt, cDumpInfoContainer)
		end
	elseif "function" == strType then
		-- Get function info.
		local cDInfo = debug.getinfo(cObject, "Su")

		-- Write this info.
		cRefInfoContainer[cObject] = (cRefInfoContainer[cObject] and (cRefInfoContainer[cObject] + 1)) or 1
		if cNameInfoContainer[cObject] then
			return
		end

		-- Set name.
		cNameInfoContainer[cObject] = strName .. "[line:" .. tostring(cDInfo.linedefined) .. "@file:" .. cDInfo.short_src .. "]"

		-- Get upvalues.
		local nUpsNum = cDInfo.nups
		for i = 1, nUpsNum do
			local strUpName, cUpValue = debug.getupvalue(cObject, i)
			local strUpValueType = type(cUpValue)
			--print(strUpName, cUpValue)
			if "table" == strUpValueType then
				CollectObjectReferenceInMemory(strName .. ".[ups:table:" .. strUpName .. "]", cUpValue, cDumpInfoContainer)
			elseif "function" == strUpValueType then
				CollectObjectReferenceInMemory(strName .. ".[ups:function:" .. strUpName .. "]", cUpValue, cDumpInfoContainer)
			elseif "thread" == strUpValueType then
				CollectObjectReferenceInMemory(strName .. ".[ups:thread:" .. strUpName .. "]", cUpValue, cDumpInfoContainer)
			elseif "userdata" == strUpValueType then
				CollectObjectReferenceInMemory(strName .. ".[ups:userdata:" .. strUpName .. "]", cUpValue, cDumpInfoContainer)
			end
		end

		-- Dump environment table.
		local getfenv = debug.getfenv
		if getfenv then
			local cEnv = getfenv(cObject)
			if cEnv then
				CollectObjectReferenceInMemory(strName ..".[function:environment]", cEnv, cDumpInfoContainer)
			end
		end
	elseif "thread" == strType then
		-- Add reference and name.
		cRefInfoContainer[cObject] = (cRefInfoContainer[cObject] and (cRefInfoContainer[cObject] + 1)) or 1
		if cNameInfoContainer[cObject] then
			return
		end

		-- Set name.
		cNameInfoContainer[cObject] = strName

		-- Dump environment table.
		local getfenv = debug.getfenv
		if getfenv then
			local cEnv = getfenv(cObject)
			if cEnv then
				CollectObjectReferenceInMemory(strName ..".[thread:environment]", cEnv, cDumpInfoContainer)
			end
		end

		-- Dump metatable.
		local cMt = getmetatable(cObject)
		if cMt then
			CollectObjectReferenceInMemory(strName ..".[thread:metatable]", cMt, cDumpInfoContainer)
		end
	elseif "userdata" == strType then
		-- Add reference and name.
		cRefInfoContainer[cObject] = (cRefInfoContainer[cObject] and (cRefInfoContainer[cObject] + 1)) or 1
		if cNameInfoContainer[cObject] then
			return
		end

		-- Set name.
		cNameInfoContainer[cObject] = strName

		-- Dump environment table.
		local getfenv = debug.getfenv
		if getfenv then
			local cEnv = getfenv(cObject)
			if cEnv then
				CollectObjectReferenceInMemory(strName ..".[userdata:environment]", cEnv, cDumpInfoContainer)
			end
		end

		-- Dump metatable.
		local cMt = getmetatable(cObject)
		if cMt then
			CollectObjectReferenceInMemory(strName ..".[userdata:metatable]", cMt, cDumpInfoContainer)
		end
    elseif "string" == strType then
        -- Add reference and name.
        cRefInfoContainer[cObject] = (cRefInfoContainer[cObject] and (cRefInfoContainer[cObject] + 1)) or 1
        if cNameInfoContainer[cObject] then
            return
        end

        -- Set name.
        cNameInfoContainer[cObject] = strName .. "[" .. strType .. "]"
	else
		-- For "number" and "boolean". (If you want to dump them, uncomment the followed lines.)

		-- -- Add reference and name.
		-- cRefInfoContainer[cObject] = (cRefInfoContainer[cObject] and (cRefInfoContainer[cObject] + 1)) or 1
		-- if cNameInfoContainer[cObject] then
		-- 	return
		-- end

		-- -- Set name.
		-- cNameInfoContainer[cObject] = strName .. "[" .. strType .. ":" .. tostring(cObject) .. "]"
	end
end

-- Collect memory reference info of a single object from a root table or function.
-- strName - The root object name that start to search, can not be nil.
-- cObject - The root object that start to search, can not be nil.
-- cDumpInfoContainer - The container of the dump result info.
local function CollectSingleObjectReferenceInMemory(strName, cObject, cDumpInfoContainer)
	if not cObject then
		return
	end

	if not strName then
		strName = ""
	end

	-- Check container.
	if (not cDumpInfoContainer) then
		cDumpInfoContainer = CreateObjectReferenceInfoContainer()
	end

	-- Check stack.
	if cDumpInfoContainer.m_nStackLevel > 0 then
		local cStackInfo = debug.getinfo(cDumpInfoContainer.m_nStackLevel, "Sl")
		if cStackInfo then
			cDumpInfoContainer.m_strShortSrc = cStackInfo.short_src
			cDumpInfoContainer.m_nCurrentLine = cStackInfo.currentline
		end

		cDumpInfoContainer.m_nStackLevel = -1
	end

	local cExistTag = cDumpInfoContainer.m_cObjectExistTag
	local cNameAllAlias = cDumpInfoContainer.m_cObjectAliasName
	local cAccessTag = cDumpInfoContainer.m_cObjectAccessTag
	
	local strType = type(cObject)
	if "table" == strType then
		-- Check table with class name.
		if rawget(cObject, "__cname") then
			if "string" == type(cObject.__cname) then
				strName = strName .. "[class:" .. cObject.__cname .. "]"
			end
		elseif rawget(cObject, "class") then
			if "string" == type(cObject.class) then
				strName = strName .. "[class:" .. cObject.class .. "]"
			end
		elseif rawget(cObject, "_className") then
			if "string" == type(cObject._className) then
				strName = strName .. "[class:" .. cObject._className .. "]"
			end
		end

		-- Check if table is _G.
		if cObject == _G then
			strName = strName .. "[_G]"
		end

		-- Get metatable.
		local bWeakK = false
		local bWeakV = false
		local cMt = getmetatable(cObject)
		if cMt then
			-- Check mode.
			local strMode = rawget(cMt, "__mode")
			if strMode then
				if "k" == strMode then
					bWeakK = true
				elseif "v" == strMode then
					bWeakV = true
				elseif "kv" == strMode then
					bWeakK = true
					bWeakV = true
				end
			end
		end

		-- Check if the specified object.
		if cExistTag[cObject] and (not cNameAllAlias[strName]) then
			cNameAllAlias[strName] = true
		end

		-- Add reference and name.
		if cAccessTag[cObject] then
			return
		end

		-- Get this name.
		cAccessTag[cObject] = true

		-- Dump table key and value.
		for k, v in pairs(cObject) do
			-- Check key type.
			local strKeyType = type(k)
			if "table" == strKeyType then
				if not bWeakK then
					CollectSingleObjectReferenceInMemory(strName .. ".[table:key.table]", k, cDumpInfoContainer)
				end

				if not bWeakV then
					CollectSingleObjectReferenceInMemory(strName .. ".[table:value]", v, cDumpInfoContainer)
				end
			elseif "function" == strKeyType then
				if not bWeakK then
					CollectSingleObjectReferenceInMemory(strName .. ".[table:key.function]", k, cDumpInfoContainer)
				end

				if not bWeakV then
					CollectSingleObjectReferenceInMemory(strName .. ".[table:value]", v, cDumpInfoContainer)
				end
			elseif "thread" == strKeyType then
				if not bWeakK then
					CollectSingleObjectReferenceInMemory(strName .. ".[table:key.thread]", k, cDumpInfoContainer)
				end

				if not bWeakV then
					CollectSingleObjectReferenceInMemory(strName .. ".[table:value]", v, cDumpInfoContainer)
				end
			elseif "userdata" == strKeyType then
				if not bWeakK then
					CollectSingleObjectReferenceInMemory(strName .. ".[table:key.userdata]", k, cDumpInfoContainer)
				end

				if not bWeakV then
					CollectSingleObjectReferenceInMemory(strName .. ".[table:value]", v, cDumpInfoContainer)
				end
			else
				CollectSingleObjectReferenceInMemory(strName .. "." .. k, v, cDumpInfoContainer)
			end
		end

		-- Dump metatable.
		if cMt then
			CollectSingleObjectReferenceInMemory(strName ..".[metatable]", cMt, cDumpInfoContainer)
		end
	elseif "function" == strType then
		-- Get function info.
		local cDInfo = debug.getinfo(cObject, "Su")
		local cCombinedName = strName .. "[line:" .. tostring(cDInfo.linedefined) .. "@file:" .. cDInfo.short_src .. "]"

		-- Check if the specified object.
		if cExistTag[cObject] and (not cNameAllAlias[cCombinedName]) then
			cNameAllAlias[cCombinedName] = true
		end

		-- Write this info.
		if cAccessTag[cObject] then
			return
		end

		-- Set name.
		cAccessTag[cObject] = true

		-- Get upvalues.
		local nUpsNum = cDInfo.nups
		for i = 1, nUpsNum do
			local strUpName, cUpValue = debug.getupvalue(cObject, i)
			local strUpValueType = type(cUpValue)
			--print(strUpName, cUpValue)
			if "table" == strUpValueType then
				CollectSingleObjectReferenceInMemory(strName .. ".[ups:table:" .. strUpName .. "]", cUpValue, cDumpInfoContainer)
			elseif "function" == strUpValueType then
				CollectSingleObjectReferenceInMemory(strName .. ".[ups:function:" .. strUpName .. "]", cUpValue, cDumpInfoContainer)
			elseif "thread" == strUpValueType then
				CollectSingleObjectReferenceInMemory(strName .. ".[ups:thread:" .. strUpName .. "]", cUpValue, cDumpInfoContainer)
			elseif "userdata" == strUpValueType then
				CollectSingleObjectReferenceInMemory(strName .. ".[ups:userdata:" .. strUpName .. "]", cUpValue, cDumpInfoContainer)
			end
		end

		-- Dump environment table.
		local
Download .txt
Showing preview only (526K chars total). Download the full file or copy to clipboard to get everything.
gitextract_syo__2db/

├── .github/
│   └── workflows/
│       └── c-cpp.yml
├── .gitignore
├── LICENSE
├── README.md
├── core/
│   ├── CMakeLists.txt
│   ├── bin/
│   │   └── server/
│   │       ├── assert_sc.lua
│   │       ├── bots.bat
│   │       ├── bots.sh
│   │       ├── log4j.properties
│   │       ├── lua/
│   │       │   ├── LuaPanda.lua
│   │       │   ├── MemoryReferenceInfo.lua
│   │       │   ├── bigworld.lua
│   │       │   ├── bots.lua
│   │       │   ├── client.lua
│   │       │   ├── clientmoveplugin.lua
│   │       │   ├── cluster.lua
│   │       │   ├── dbentity.lua
│   │       │   ├── dbplugin.lua
│   │       │   ├── dbsvr.lua
│   │       │   ├── dcopy.lua
│   │       │   ├── dkjson.lua
│   │       │   ├── dockerrun.lua
│   │       │   ├── eloghelp.lua
│   │       │   ├── entity.lua
│   │       │   ├── entitymng.lua
│   │       │   ├── list.lua
│   │       │   ├── ltn12.lua
│   │       │   ├── mime.lua
│   │       │   ├── moveplugin.lua
│   │       │   ├── msgpack.lua
│   │       │   ├── npc.lua
│   │       │   ├── profiler.lua
│   │       │   ├── redis.lua
│   │       │   ├── redishelp.lua
│   │       │   ├── sc.lua
│   │       │   ├── socket/
│   │       │   │   ├── ftp.lua
│   │       │   │   ├── http.lua
│   │       │   │   ├── smtp.lua
│   │       │   │   ├── tp.lua
│   │       │   │   └── url.lua
│   │       │   ├── socket.lua
│   │       │   ├── space.lua
│   │       │   ├── spaceplugin.lua
│   │       │   ├── spaceproxy.lua
│   │       │   ├── strpath.lua
│   │       │   ├── sudoku.lua
│   │       │   ├── sudokuex.lua
│   │       │   ├── tabtostr.lua
│   │       │   ├── tcpproxy.lua
│   │       │   ├── test-allmongo.lua
│   │       │   ├── test-bson.lua
│   │       │   ├── test-gridfs.lua
│   │       │   ├── test-mongo.lua
│   │       │   ├── test_entity/
│   │       │   │   ├── myEntity.lua
│   │       │   │   ├── parant.lua
│   │       │   │   ├── parant2.lua
│   │       │   │   ├── parant3.lua
│   │       │   │   └── test_myEntity.lua
│   │       │   ├── test_list.lua
│   │       │   ├── test_lua.lua
│   │       │   ├── tools.lua
│   │       │   ├── try-catch-finally.lua
│   │       │   ├── ttry-catch.lua
│   │       │   ├── udpproxy.lua
│   │       │   └── udpproxylist.lua
│   │       ├── redis.bat
│   │       ├── redis.windows-service.conf
│   │       ├── redis.windows.conf
│   │       └── test.json
│   ├── res/
│   │   └── server/
│   │       └── config_defaults.json
│   └── src/
│       ├── lib/
│       │   ├── 3rd/
│       │   │   ├── 3dmath/
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── box.c
│       │   │   │   ├── box.h
│       │   │   │   ├── mathf.c
│       │   │   │   ├── mathf.h
│       │   │   │   ├── matrix4.c
│       │   │   │   ├── matrix4.h
│       │   │   │   ├── plane.c
│       │   │   │   ├── plane.h
│       │   │   │   ├── quaternion.c
│       │   │   │   ├── quaternion.h
│       │   │   │   ├── ray.c
│       │   │   │   ├── ray.h
│       │   │   │   ├── transform.c
│       │   │   │   ├── transform.h
│       │   │   │   ├── vector.c
│       │   │   │   ├── vector.h
│       │   │   │   ├── vector2.c
│       │   │   │   └── vector2.h
│       │   │   ├── hiredis/
│       │   │   │   ├── .github/
│       │   │   │   │   └── workflows/
│       │   │   │   │       └── build.yml
│       │   │   │   ├── .gitignore
│       │   │   │   ├── .travis.yml
│       │   │   │   ├── CHANGELOG.md
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── COPYING
│       │   │   │   ├── Makefile
│       │   │   │   ├── README.md
│       │   │   │   ├── adapters/
│       │   │   │   │   ├── ae.h
│       │   │   │   │   ├── glib.h
│       │   │   │   │   ├── ivykis.h
│       │   │   │   │   ├── libev.h
│       │   │   │   │   ├── libevent.h
│       │   │   │   │   ├── libuv.h
│       │   │   │   │   ├── macosx.h
│       │   │   │   │   └── qt.h
│       │   │   │   ├── alloc.c
│       │   │   │   ├── alloc.h
│       │   │   │   ├── appveyor.yml
│       │   │   │   ├── async.c
│       │   │   │   ├── async.h
│       │   │   │   ├── async_private.h
│       │   │   │   ├── dict.c
│       │   │   │   ├── dict.h
│       │   │   │   ├── examples/
│       │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   ├── example-ae.c
│       │   │   │   │   ├── example-glib.c
│       │   │   │   │   ├── example-ivykis.c
│       │   │   │   │   ├── example-libev.c
│       │   │   │   │   ├── example-libevent-ssl.c
│       │   │   │   │   ├── example-libevent.c
│       │   │   │   │   ├── example-libuv.c
│       │   │   │   │   ├── example-macosx.c
│       │   │   │   │   ├── example-push.c
│       │   │   │   │   ├── example-qt.cpp
│       │   │   │   │   ├── example-qt.h
│       │   │   │   │   ├── example-ssl.c
│       │   │   │   │   └── example.c
│       │   │   │   ├── fmacros.h
│       │   │   │   ├── fuzzing/
│       │   │   │   │   └── format_command_fuzzer.c
│       │   │   │   ├── hiredis-config.cmake.in
│       │   │   │   ├── hiredis.c
│       │   │   │   ├── hiredis.h
│       │   │   │   ├── hiredis.pc.in
│       │   │   │   ├── hiredis.targets
│       │   │   │   ├── hiredis_ssl-config.cmake.in
│       │   │   │   ├── hiredis_ssl.h
│       │   │   │   ├── hiredis_ssl.pc.in
│       │   │   │   ├── net.c
│       │   │   │   ├── net.h
│       │   │   │   ├── read.c
│       │   │   │   ├── read.h
│       │   │   │   ├── sds.c
│       │   │   │   ├── sds.h
│       │   │   │   ├── sdsalloc.h
│       │   │   │   ├── sockcompat.c
│       │   │   │   ├── sockcompat.h
│       │   │   │   ├── ssl.c
│       │   │   │   ├── test.c
│       │   │   │   ├── test.sh
│       │   │   │   └── win32.h
│       │   │   ├── libuv/
│       │   │   │   ├── .gitattributes
│       │   │   │   ├── .mailmap
│       │   │   │   ├── AUTHORS
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── CONTRIBUTING.md
│       │   │   │   ├── ChangeLog
│       │   │   │   ├── LICENSE
│       │   │   │   ├── LICENSE-docs
│       │   │   │   ├── MAINTAINERS.md
│       │   │   │   ├── Makefile.am
│       │   │   │   ├── README.md
│       │   │   │   ├── SUPPORTED_PLATFORMS.md
│       │   │   │   ├── autogen.sh
│       │   │   │   ├── configure.ac
│       │   │   │   ├── docs/
│       │   │   │   │   ├── Makefile
│       │   │   │   │   ├── code/
│       │   │   │   │   │   ├── cgi/
│       │   │   │   │   │   │   ├── main.c
│       │   │   │   │   │   │   └── tick.c
│       │   │   │   │   │   ├── detach/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── dns/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── helloworld/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── idle-basic/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── idle-compute/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── interfaces/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── locks/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── multi-echo-server/
│       │   │   │   │   │   │   ├── hammer.js
│       │   │   │   │   │   │   ├── main.c
│       │   │   │   │   │   │   └── worker.c
│       │   │   │   │   │   ├── onchange/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── pipe-echo-server/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── plugin/
│       │   │   │   │   │   │   ├── hello.c
│       │   │   │   │   │   │   ├── main.c
│       │   │   │   │   │   │   └── plugin.h
│       │   │   │   │   │   ├── proc-streams/
│       │   │   │   │   │   │   ├── main.c
│       │   │   │   │   │   │   └── test.c
│       │   │   │   │   │   ├── progress/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── queue-cancel/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── queue-work/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── ref-timer/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── signal/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── spawn/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── tcp-echo-server/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── thread-create/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── tty/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── tty-gravity/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── udp-dhcp/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── uvcat/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── uvstop/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   ├── uvtee/
│       │   │   │   │   │   │   └── main.c
│       │   │   │   │   │   └── uvwget/
│       │   │   │   │   │       └── main.c
│       │   │   │   │   ├── make.bat
│       │   │   │   │   └── src/
│       │   │   │   │       ├── api.rst
│       │   │   │   │       ├── async.rst
│       │   │   │   │       ├── check.rst
│       │   │   │   │       ├── conf.py
│       │   │   │   │       ├── design.rst
│       │   │   │   │       ├── dll.rst
│       │   │   │   │       ├── dns.rst
│       │   │   │   │       ├── errors.rst
│       │   │   │   │       ├── fs.rst
│       │   │   │   │       ├── fs_event.rst
│       │   │   │   │       ├── fs_poll.rst
│       │   │   │   │       ├── guide/
│       │   │   │   │       │   ├── about.rst
│       │   │   │   │       │   ├── basics.rst
│       │   │   │   │       │   ├── eventloops.rst
│       │   │   │   │       │   ├── filesystem.rst
│       │   │   │   │       │   ├── introduction.rst
│       │   │   │   │       │   ├── networking.rst
│       │   │   │   │       │   ├── processes.rst
│       │   │   │   │       │   ├── threads.rst
│       │   │   │   │       │   └── utilities.rst
│       │   │   │   │       ├── guide.rst
│       │   │   │   │       ├── handle.rst
│       │   │   │   │       ├── idle.rst
│       │   │   │   │       ├── index.rst
│       │   │   │   │       ├── loop.rst
│       │   │   │   │       ├── metrics.rst
│       │   │   │   │       ├── migration_010_100.rst
│       │   │   │   │       ├── misc.rst
│       │   │   │   │       ├── pipe.rst
│       │   │   │   │       ├── poll.rst
│       │   │   │   │       ├── prepare.rst
│       │   │   │   │       ├── process.rst
│       │   │   │   │       ├── request.rst
│       │   │   │   │       ├── signal.rst
│       │   │   │   │       ├── sphinx-plugins/
│       │   │   │   │       │   └── manpage.py
│       │   │   │   │       ├── static/
│       │   │   │   │       │   └── diagrams.key/
│       │   │   │   │       │       └── Metadata/
│       │   │   │   │       │           ├── BuildVersionHistory.plist
│       │   │   │   │       │           ├── DocumentIdentifier
│       │   │   │   │       │           └── Properties.plist
│       │   │   │   │       ├── stream.rst
│       │   │   │   │       ├── tcp.rst
│       │   │   │   │       ├── threading.rst
│       │   │   │   │       ├── threadpool.rst
│       │   │   │   │       ├── timer.rst
│       │   │   │   │       ├── tty.rst
│       │   │   │   │       ├── udp.rst
│       │   │   │   │       ├── upgrading.rst
│       │   │   │   │       └── version.rst
│       │   │   │   ├── include/
│       │   │   │   │   ├── uv/
│       │   │   │   │   │   ├── aix.h
│       │   │   │   │   │   ├── android-ifaddrs.h
│       │   │   │   │   │   ├── bsd.h
│       │   │   │   │   │   ├── darwin.h
│       │   │   │   │   │   ├── errno.h
│       │   │   │   │   │   ├── linux.h
│       │   │   │   │   │   ├── os390.h
│       │   │   │   │   │   ├── posix.h
│       │   │   │   │   │   ├── stdint-msvc2008.h
│       │   │   │   │   │   ├── sunos.h
│       │   │   │   │   │   ├── threadpool.h
│       │   │   │   │   │   ├── tree.h
│       │   │   │   │   │   ├── unix.h
│       │   │   │   │   │   ├── version.h
│       │   │   │   │   │   └── win.h
│       │   │   │   │   └── uv.h
│       │   │   │   ├── libuv-static.pc.in
│       │   │   │   ├── libuv.pc.in
│       │   │   │   ├── m4/
│       │   │   │   │   ├── .gitignore
│       │   │   │   │   ├── as_case.m4
│       │   │   │   │   ├── ax_pthread.m4
│       │   │   │   │   └── libuv-check-flags.m4
│       │   │   │   ├── src/
│       │   │   │   │   ├── fs-poll.c
│       │   │   │   │   ├── heap-inl.h
│       │   │   │   │   ├── idna.c
│       │   │   │   │   ├── idna.h
│       │   │   │   │   ├── inet.c
│       │   │   │   │   ├── queue.h
│       │   │   │   │   ├── random.c
│       │   │   │   │   ├── strscpy.c
│       │   │   │   │   ├── strscpy.h
│       │   │   │   │   ├── threadpool.c
│       │   │   │   │   ├── timer.c
│       │   │   │   │   ├── unix/
│       │   │   │   │   │   ├── aix-common.c
│       │   │   │   │   │   ├── aix.c
│       │   │   │   │   │   ├── android-ifaddrs.c
│       │   │   │   │   │   ├── async.c
│       │   │   │   │   │   ├── atomic-ops.h
│       │   │   │   │   │   ├── bsd-ifaddrs.c
│       │   │   │   │   │   ├── bsd-proctitle.c
│       │   │   │   │   │   ├── core.c
│       │   │   │   │   │   ├── cygwin.c
│       │   │   │   │   │   ├── darwin-proctitle.c
│       │   │   │   │   │   ├── darwin-stub.h
│       │   │   │   │   │   ├── darwin.c
│       │   │   │   │   │   ├── dl.c
│       │   │   │   │   │   ├── freebsd.c
│       │   │   │   │   │   ├── fs.c
│       │   │   │   │   │   ├── fsevents.c
│       │   │   │   │   │   ├── getaddrinfo.c
│       │   │   │   │   │   ├── getnameinfo.c
│       │   │   │   │   │   ├── haiku.c
│       │   │   │   │   │   ├── ibmi.c
│       │   │   │   │   │   ├── internal.h
│       │   │   │   │   │   ├── kqueue.c
│       │   │   │   │   │   ├── linux-core.c
│       │   │   │   │   │   ├── linux-inotify.c
│       │   │   │   │   │   ├── linux-syscalls.c
│       │   │   │   │   │   ├── linux-syscalls.h
│       │   │   │   │   │   ├── loop-watcher.c
│       │   │   │   │   │   ├── loop.c
│       │   │   │   │   │   ├── netbsd.c
│       │   │   │   │   │   ├── no-fsevents.c
│       │   │   │   │   │   ├── no-proctitle.c
│       │   │   │   │   │   ├── openbsd.c
│       │   │   │   │   │   ├── os390-syscalls.c
│       │   │   │   │   │   ├── os390-syscalls.h
│       │   │   │   │   │   ├── os390.c
│       │   │   │   │   │   ├── pipe.c
│       │   │   │   │   │   ├── poll.c
│       │   │   │   │   │   ├── posix-hrtime.c
│       │   │   │   │   │   ├── posix-poll.c
│       │   │   │   │   │   ├── process.c
│       │   │   │   │   │   ├── procfs-exepath.c
│       │   │   │   │   │   ├── proctitle.c
│       │   │   │   │   │   ├── pthread-fixes.c
│       │   │   │   │   │   ├── qnx.c
│       │   │   │   │   │   ├── random-devurandom.c
│       │   │   │   │   │   ├── random-getentropy.c
│       │   │   │   │   │   ├── random-getrandom.c
│       │   │   │   │   │   ├── random-sysctl-linux.c
│       │   │   │   │   │   ├── signal.c
│       │   │   │   │   │   ├── spinlock.h
│       │   │   │   │   │   ├── stream.c
│       │   │   │   │   │   ├── sunos.c
│       │   │   │   │   │   ├── sysinfo-loadavg.c
│       │   │   │   │   │   ├── sysinfo-memory.c
│       │   │   │   │   │   ├── tcp.c
│       │   │   │   │   │   ├── thread.c
│       │   │   │   │   │   ├── tty.c
│       │   │   │   │   │   └── udp.c
│       │   │   │   │   ├── uv-common.c
│       │   │   │   │   ├── uv-common.h
│       │   │   │   │   ├── uv-data-getter-setters.c
│       │   │   │   │   ├── version.c
│       │   │   │   │   └── win/
│       │   │   │   │       ├── async.c
│       │   │   │   │       ├── atomicops-inl.h
│       │   │   │   │       ├── core.c
│       │   │   │   │       ├── detect-wakeup.c
│       │   │   │   │       ├── dl.c
│       │   │   │   │       ├── error.c
│       │   │   │   │       ├── fs-event.c
│       │   │   │   │       ├── fs-fd-hash-inl.h
│       │   │   │   │       ├── fs.c
│       │   │   │   │       ├── getaddrinfo.c
│       │   │   │   │       ├── getnameinfo.c
│       │   │   │   │       ├── handle-inl.h
│       │   │   │   │       ├── handle.c
│       │   │   │   │       ├── internal.h
│       │   │   │   │       ├── loop-watcher.c
│       │   │   │   │       ├── pipe.c
│       │   │   │   │       ├── poll.c
│       │   │   │   │       ├── process-stdio.c
│       │   │   │   │       ├── process.c
│       │   │   │   │       ├── req-inl.h
│       │   │   │   │       ├── signal.c
│       │   │   │   │       ├── snprintf.c
│       │   │   │   │       ├── stream-inl.h
│       │   │   │   │       ├── stream.c
│       │   │   │   │       ├── tcp.c
│       │   │   │   │       ├── thread.c
│       │   │   │   │       ├── tty.c
│       │   │   │   │       ├── udp.c
│       │   │   │   │       ├── util.c
│       │   │   │   │       ├── winapi.c
│       │   │   │   │       ├── winapi.h
│       │   │   │   │       ├── winsock.c
│       │   │   │   │       └── winsock.h
│       │   │   │   ├── test/
│       │   │   │   │   ├── benchmark-async-pummel.c
│       │   │   │   │   ├── benchmark-async.c
│       │   │   │   │   ├── benchmark-fs-stat.c
│       │   │   │   │   ├── benchmark-getaddrinfo.c
│       │   │   │   │   ├── benchmark-list.h
│       │   │   │   │   ├── benchmark-loop-count.c
│       │   │   │   │   ├── benchmark-million-async.c
│       │   │   │   │   ├── benchmark-million-timers.c
│       │   │   │   │   ├── benchmark-multi-accept.c
│       │   │   │   │   ├── benchmark-ping-pongs.c
│       │   │   │   │   ├── benchmark-ping-udp.c
│       │   │   │   │   ├── benchmark-pound.c
│       │   │   │   │   ├── benchmark-pump.c
│       │   │   │   │   ├── benchmark-sizes.c
│       │   │   │   │   ├── benchmark-spawn.c
│       │   │   │   │   ├── benchmark-tcp-write-batch.c
│       │   │   │   │   ├── benchmark-thread.c
│       │   │   │   │   ├── benchmark-udp-pummel.c
│       │   │   │   │   ├── blackhole-server.c
│       │   │   │   │   ├── dns-server.c
│       │   │   │   │   ├── echo-server.c
│       │   │   │   │   ├── fixtures/
│       │   │   │   │   │   ├── empty_file
│       │   │   │   │   │   ├── load_error.node
│       │   │   │   │   │   └── lorem_ipsum.txt
│       │   │   │   │   ├── run-benchmarks.c
│       │   │   │   │   ├── run-tests.c
│       │   │   │   │   ├── runner-unix.c
│       │   │   │   │   ├── runner-unix.h
│       │   │   │   │   ├── runner-win.c
│       │   │   │   │   ├── runner-win.h
│       │   │   │   │   ├── runner.c
│       │   │   │   │   ├── runner.h
│       │   │   │   │   ├── task.h
│       │   │   │   │   ├── test-active.c
│       │   │   │   │   ├── test-async-null-cb.c
│       │   │   │   │   ├── test-async.c
│       │   │   │   │   ├── test-barrier.c
│       │   │   │   │   ├── test-callback-order.c
│       │   │   │   │   ├── test-callback-stack.c
│       │   │   │   │   ├── test-close-fd.c
│       │   │   │   │   ├── test-close-order.c
│       │   │   │   │   ├── test-condvar.c
│       │   │   │   │   ├── test-connect-unspecified.c
│       │   │   │   │   ├── test-connection-fail.c
│       │   │   │   │   ├── test-cwd-and-chdir.c
│       │   │   │   │   ├── test-default-loop-close.c
│       │   │   │   │   ├── test-delayed-accept.c
│       │   │   │   │   ├── test-dlerror.c
│       │   │   │   │   ├── test-eintr-handling.c
│       │   │   │   │   ├── test-embed.c
│       │   │   │   │   ├── test-emfile.c
│       │   │   │   │   ├── test-env-vars.c
│       │   │   │   │   ├── test-error.c
│       │   │   │   │   ├── test-fail-always.c
│       │   │   │   │   ├── test-fork.c
│       │   │   │   │   ├── test-fs-copyfile.c
│       │   │   │   │   ├── test-fs-event.c
│       │   │   │   │   ├── test-fs-fd-hash.c
│       │   │   │   │   ├── test-fs-open-flags.c
│       │   │   │   │   ├── test-fs-poll.c
│       │   │   │   │   ├── test-fs-readdir.c
│       │   │   │   │   ├── test-fs.c
│       │   │   │   │   ├── test-get-currentexe.c
│       │   │   │   │   ├── test-get-loadavg.c
│       │   │   │   │   ├── test-get-memory.c
│       │   │   │   │   ├── test-get-passwd.c
│       │   │   │   │   ├── test-getaddrinfo.c
│       │   │   │   │   ├── test-gethostname.c
│       │   │   │   │   ├── test-getnameinfo.c
│       │   │   │   │   ├── test-getsockname.c
│       │   │   │   │   ├── test-getters-setters.c
│       │   │   │   │   ├── test-gettimeofday.c
│       │   │   │   │   ├── test-handle-fileno.c
│       │   │   │   │   ├── test-homedir.c
│       │   │   │   │   ├── test-hrtime.c
│       │   │   │   │   ├── test-idle.c
│       │   │   │   │   ├── test-idna.c
│       │   │   │   │   ├── test-ip4-addr.c
│       │   │   │   │   ├── test-ip6-addr.c
│       │   │   │   │   ├── test-ipc-heavy-traffic-deadlock-bug.c
│       │   │   │   │   ├── test-ipc-send-recv.c
│       │   │   │   │   ├── test-ipc.c
│       │   │   │   │   ├── test-list.h
│       │   │   │   │   ├── test-loop-alive.c
│       │   │   │   │   ├── test-loop-close.c
│       │   │   │   │   ├── test-loop-configure.c
│       │   │   │   │   ├── test-loop-handles.c
│       │   │   │   │   ├── test-loop-stop.c
│       │   │   │   │   ├── test-loop-time.c
│       │   │   │   │   ├── test-metrics.c
│       │   │   │   │   ├── test-multiple-listen.c
│       │   │   │   │   ├── test-mutexes.c
│       │   │   │   │   ├── test-osx-select.c
│       │   │   │   │   ├── test-pass-always.c
│       │   │   │   │   ├── test-ping-pong.c
│       │   │   │   │   ├── test-pipe-bind-error.c
│       │   │   │   │   ├── test-pipe-close-stdout-read-stdin.c
│       │   │   │   │   ├── test-pipe-connect-error.c
│       │   │   │   │   ├── test-pipe-connect-multiple.c
│       │   │   │   │   ├── test-pipe-connect-prepare.c
│       │   │   │   │   ├── test-pipe-getsockname.c
│       │   │   │   │   ├── test-pipe-pending-instances.c
│       │   │   │   │   ├── test-pipe-sendmsg.c
│       │   │   │   │   ├── test-pipe-server-close.c
│       │   │   │   │   ├── test-pipe-set-fchmod.c
│       │   │   │   │   ├── test-pipe-set-non-blocking.c
│       │   │   │   │   ├── test-platform-output.c
│       │   │   │   │   ├── test-poll-close-doesnt-corrupt-stack.c
│       │   │   │   │   ├── test-poll-close.c
│       │   │   │   │   ├── test-poll-closesocket.c
│       │   │   │   │   ├── test-poll-multiple-handles.c
│       │   │   │   │   ├── test-poll-oob.c
│       │   │   │   │   ├── test-poll.c
│       │   │   │   │   ├── test-process-priority.c
│       │   │   │   │   ├── test-process-title-threadsafe.c
│       │   │   │   │   ├── test-process-title.c
│       │   │   │   │   ├── test-queue-foreach-delete.c
│       │   │   │   │   ├── test-random.c
│       │   │   │   │   ├── test-ref.c
│       │   │   │   │   ├── test-run-nowait.c
│       │   │   │   │   ├── test-run-once.c
│       │   │   │   │   ├── test-semaphore.c
│       │   │   │   │   ├── test-shutdown-close.c
│       │   │   │   │   ├── test-shutdown-eof.c
│       │   │   │   │   ├── test-shutdown-twice.c
│       │   │   │   │   ├── test-signal-multiple-loops.c
│       │   │   │   │   ├── test-signal-pending-on-close.c
│       │   │   │   │   ├── test-signal.c
│       │   │   │   │   ├── test-socket-buffer-size.c
│       │   │   │   │   ├── test-spawn.c
│       │   │   │   │   ├── test-stdio-over-pipes.c
│       │   │   │   │   ├── test-strscpy.c
│       │   │   │   │   ├── test-tcp-alloc-cb-fail.c
│       │   │   │   │   ├── test-tcp-bind-error.c
│       │   │   │   │   ├── test-tcp-bind6-error.c
│       │   │   │   │   ├── test-tcp-close-accept.c
│       │   │   │   │   ├── test-tcp-close-reset.c
│       │   │   │   │   ├── test-tcp-close-while-connecting.c
│       │   │   │   │   ├── test-tcp-close.c
│       │   │   │   │   ├── test-tcp-connect-error-after-write.c
│       │   │   │   │   ├── test-tcp-connect-error.c
│       │   │   │   │   ├── test-tcp-connect-timeout.c
│       │   │   │   │   ├── test-tcp-connect6-error.c
│       │   │   │   │   ├── test-tcp-create-socket-early.c
│       │   │   │   │   ├── test-tcp-flags.c
│       │   │   │   │   ├── test-tcp-oob.c
│       │   │   │   │   ├── test-tcp-open.c
│       │   │   │   │   ├── test-tcp-read-stop-start.c
│       │   │   │   │   ├── test-tcp-read-stop.c
│       │   │   │   │   ├── test-tcp-shutdown-after-write.c
│       │   │   │   │   ├── test-tcp-try-write-error.c
│       │   │   │   │   ├── test-tcp-try-write.c
│       │   │   │   │   ├── test-tcp-unexpected-read.c
│       │   │   │   │   ├── test-tcp-write-after-connect.c
│       │   │   │   │   ├── test-tcp-write-fail.c
│       │   │   │   │   ├── test-tcp-write-queue-order.c
│       │   │   │   │   ├── test-tcp-write-to-half-open-connection.c
│       │   │   │   │   ├── test-tcp-writealot.c
│       │   │   │   │   ├── test-test-macros.c
│       │   │   │   │   ├── test-thread-equal.c
│       │   │   │   │   ├── test-thread.c
│       │   │   │   │   ├── test-threadpool-cancel.c
│       │   │   │   │   ├── test-threadpool.c
│       │   │   │   │   ├── test-timer-again.c
│       │   │   │   │   ├── test-timer-from-check.c
│       │   │   │   │   ├── test-timer.c
│       │   │   │   │   ├── test-tmpdir.c
│       │   │   │   │   ├── test-tty-duplicate-key.c
│       │   │   │   │   ├── test-tty-escape-sequence-processing.c
│       │   │   │   │   ├── test-tty.c
│       │   │   │   │   ├── test-udp-alloc-cb-fail.c
│       │   │   │   │   ├── test-udp-bind.c
│       │   │   │   │   ├── test-udp-connect.c
│       │   │   │   │   ├── test-udp-create-socket-early.c
│       │   │   │   │   ├── test-udp-dgram-too-big.c
│       │   │   │   │   ├── test-udp-ipv6.c
│       │   │   │   │   ├── test-udp-mmsg.c
│       │   │   │   │   ├── test-udp-multicast-interface.c
│       │   │   │   │   ├── test-udp-multicast-interface6.c
│       │   │   │   │   ├── test-udp-multicast-join.c
│       │   │   │   │   ├── test-udp-multicast-join6.c
│       │   │   │   │   ├── test-udp-multicast-ttl.c
│       │   │   │   │   ├── test-udp-open.c
│       │   │   │   │   ├── test-udp-options.c
│       │   │   │   │   ├── test-udp-send-and-recv.c
│       │   │   │   │   ├── test-udp-send-hang-loop.c
│       │   │   │   │   ├── test-udp-send-immediate.c
│       │   │   │   │   ├── test-udp-send-unreachable.c
│       │   │   │   │   ├── test-udp-sendmmsg-error.c
│       │   │   │   │   ├── test-udp-try-send.c
│       │   │   │   │   ├── test-uname.c
│       │   │   │   │   ├── test-walk-handles.c
│       │   │   │   │   └── test-watcher-cross-stop.c
│       │   │   │   ├── tools/
│       │   │   │   │   └── make_dist_html.py
│       │   │   │   └── uv_win_longpath.manifest
│       │   │   ├── lua/
│       │   │   │   ├── COPYRIGHT
│       │   │   │   ├── HISTORY
│       │   │   │   ├── INSTALL
│       │   │   │   ├── Makefile
│       │   │   │   ├── README
│       │   │   │   └── src/
│       │   │   │       ├── CMakeLists.txt
│       │   │   │       ├── Makefile
│       │   │   │       ├── lapi.c
│       │   │   │       ├── lapi.h
│       │   │   │       ├── lauxlib.c
│       │   │   │       ├── lauxlib.h
│       │   │   │       ├── lbaselib.c
│       │   │   │       ├── lbitlib.c
│       │   │   │       ├── lcode.c
│       │   │   │       ├── lcode.h
│       │   │   │       ├── lcorolib.c
│       │   │   │       ├── lctype.c
│       │   │   │       ├── lctype.h
│       │   │   │       ├── ldblib.c
│       │   │   │       ├── ldebug.c
│       │   │   │       ├── ldebug.h
│       │   │   │       ├── ldo.c
│       │   │   │       ├── ldo.h
│       │   │   │       ├── ldump.c
│       │   │   │       ├── lfunc.c
│       │   │   │       ├── lfunc.h
│       │   │   │       ├── lgc.c
│       │   │   │       ├── lgc.h
│       │   │   │       ├── linit.c
│       │   │   │       ├── liolib.c
│       │   │   │       ├── llex.c
│       │   │   │       ├── llex.h
│       │   │   │       ├── llimits.h
│       │   │   │       ├── lmathlib.c
│       │   │   │       ├── lmem.c
│       │   │   │       ├── lmem.h
│       │   │   │       ├── loadlib.c
│       │   │   │       ├── lobject.c
│       │   │   │       ├── lobject.h
│       │   │   │       ├── lopcodes.c
│       │   │   │       ├── lopcodes.h
│       │   │   │       ├── loslib.c
│       │   │   │       ├── lparser.c
│       │   │   │       ├── lparser.h
│       │   │   │       ├── lstate.c
│       │   │   │       ├── lstate.h
│       │   │   │       ├── lstring.c
│       │   │   │       ├── lstring.h
│       │   │   │       ├── lstrlib.c
│       │   │   │       ├── ltable.c
│       │   │   │       ├── ltable.h
│       │   │   │       ├── ltablib.c
│       │   │   │       ├── ltm.c
│       │   │   │       ├── ltm.h
│       │   │   │       ├── lua.c
│       │   │   │       ├── lua.h
│       │   │   │       ├── lua.hpp
│       │   │   │       ├── luac.c
│       │   │   │       ├── luaconf.h
│       │   │   │       ├── lualib.h
│       │   │   │       ├── lundump.c
│       │   │   │       ├── lundump.h
│       │   │   │       ├── lvm.c
│       │   │   │       ├── lvm.h
│       │   │   │       ├── lzio.c
│       │   │   │       └── lzio.h
│       │   │   ├── lua-mongodb/
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── bson.c
│       │   │   │   ├── bsontype.c
│       │   │   │   ├── bulkoperation.c
│       │   │   │   ├── client.c
│       │   │   │   ├── collection.c
│       │   │   │   ├── common.h
│       │   │   │   ├── cursor.c
│       │   │   │   ├── database.c
│       │   │   │   ├── flags.c
│       │   │   │   ├── gridfs.c
│       │   │   │   ├── gridfsfile.c
│       │   │   │   ├── gridfsfilelist.c
│       │   │   │   ├── lua-mongodb.c
│       │   │   │   ├── lua-mongodb.h
│       │   │   │   ├── objectid.c
│       │   │   │   ├── readprefs.c
│       │   │   │   └── util.c
│       │   │   ├── luajit/
│       │   │   │   ├── .gitignore
│       │   │   │   ├── .travis.yml
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── COPYRIGHT
│       │   │   │   ├── Makefile
│       │   │   │   ├── README.md
│       │   │   │   ├── cmake/
│       │   │   │   │   ├── FindLua.cmake
│       │   │   │   │   ├── FindReadline.cmake
│       │   │   │   │   ├── dist.cmake
│       │   │   │   │   └── lua.cmake
│       │   │   │   ├── dist.info
│       │   │   │   ├── doc/
│       │   │   │   │   ├── bluequad-print.css
│       │   │   │   │   ├── bluequad.css
│       │   │   │   │   ├── changes.html
│       │   │   │   │   ├── contact.html
│       │   │   │   │   ├── ext_c_api.html
│       │   │   │   │   ├── ext_ffi.html
│       │   │   │   │   ├── ext_ffi_api.html
│       │   │   │   │   ├── ext_ffi_semantics.html
│       │   │   │   │   ├── ext_ffi_tutorial.html
│       │   │   │   │   ├── ext_jit.html
│       │   │   │   │   ├── ext_profiler.html
│       │   │   │   │   ├── extensions.html
│       │   │   │   │   ├── faq.html
│       │   │   │   │   ├── install.html
│       │   │   │   │   ├── luajit.html
│       │   │   │   │   ├── running.html
│       │   │   │   │   └── status.html
│       │   │   │   ├── dynasm/
│       │   │   │   │   ├── dasm_arm.h
│       │   │   │   │   ├── dasm_arm.lua
│       │   │   │   │   ├── dasm_arm64.h
│       │   │   │   │   ├── dasm_arm64.lua
│       │   │   │   │   ├── dasm_mips.h
│       │   │   │   │   ├── dasm_mips.lua
│       │   │   │   │   ├── dasm_mips64.lua
│       │   │   │   │   ├── dasm_ppc.h
│       │   │   │   │   ├── dasm_ppc.lua
│       │   │   │   │   ├── dasm_proto.h
│       │   │   │   │   ├── dasm_x64.lua
│       │   │   │   │   ├── dasm_x86.h
│       │   │   │   │   ├── dasm_x86.lua
│       │   │   │   │   └── dynasm.lua
│       │   │   │   └── etc/
│       │   │   │       ├── luajit.1
│       │   │   │       └── luajit.pc
│       │   │   ├── luasocket/
│       │   │   │   ├── .gitignore
│       │   │   │   ├── .travis.yml
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── FIX
│       │   │   │   ├── LICENSE
│       │   │   │   ├── Lua51.props
│       │   │   │   ├── Lua52.props
│       │   │   │   ├── NEW
│       │   │   │   ├── README
│       │   │   │   ├── TODO
│       │   │   │   ├── WISH
│       │   │   │   ├── cmake/
│       │   │   │   │   ├── FindLua.cmake
│       │   │   │   │   ├── dist.cmake
│       │   │   │   │   └── lua.cmake
│       │   │   │   ├── dist.info
│       │   │   │   ├── doc/
│       │   │   │   │   ├── dns.html
│       │   │   │   │   ├── ftp.html
│       │   │   │   │   ├── http.html
│       │   │   │   │   ├── index.html
│       │   │   │   │   ├── installation.html
│       │   │   │   │   ├── introduction.html
│       │   │   │   │   ├── ltn12.html
│       │   │   │   │   ├── lua05.ppt
│       │   │   │   │   ├── mime.html
│       │   │   │   │   ├── reference.css
│       │   │   │   │   ├── reference.html
│       │   │   │   │   ├── smtp.html
│       │   │   │   │   ├── socket.html
│       │   │   │   │   ├── tcp.html
│       │   │   │   │   ├── udp.html
│       │   │   │   │   └── url.html
│       │   │   │   ├── etc/
│       │   │   │   │   ├── README
│       │   │   │   │   ├── b64.lua
│       │   │   │   │   ├── check-links.lua
│       │   │   │   │   ├── check-memory.lua
│       │   │   │   │   ├── cookie.lua
│       │   │   │   │   ├── dict.lua
│       │   │   │   │   ├── dispatch.lua
│       │   │   │   │   ├── eol.lua
│       │   │   │   │   ├── forward.lua
│       │   │   │   │   ├── get.lua
│       │   │   │   │   ├── links
│       │   │   │   │   ├── lp.lua
│       │   │   │   │   ├── qp.lua
│       │   │   │   │   └── tftp.lua
│       │   │   │   ├── gem/
│       │   │   │   │   ├── ex1.lua
│       │   │   │   │   ├── ex10.lua
│       │   │   │   │   ├── ex11.lua
│       │   │   │   │   ├── ex12.lua
│       │   │   │   │   ├── ex2.lua
│       │   │   │   │   ├── ex3.lua
│       │   │   │   │   ├── ex4.lua
│       │   │   │   │   ├── ex5.lua
│       │   │   │   │   ├── ex6.lua
│       │   │   │   │   ├── ex7.lua
│       │   │   │   │   ├── ex8.lua
│       │   │   │   │   ├── ex9.lua
│       │   │   │   │   ├── gem.c
│       │   │   │   │   ├── gt.b64
│       │   │   │   │   ├── ltn012.tex
│       │   │   │   │   ├── makefile
│       │   │   │   │   ├── myps2pdf
│       │   │   │   │   ├── t1.lua
│       │   │   │   │   ├── t1lf.txt
│       │   │   │   │   ├── t2.lua
│       │   │   │   │   ├── t2.txt
│       │   │   │   │   ├── t2gt.qp
│       │   │   │   │   ├── t3.lua
│       │   │   │   │   ├── t4.lua
│       │   │   │   │   ├── t5.lua
│       │   │   │   │   └── test.lua
│       │   │   │   ├── logo.ps
│       │   │   │   ├── ltn012.wiki
│       │   │   │   ├── ltn013.wiki
│       │   │   │   ├── luasocket-scm-0.rockspec
│       │   │   │   ├── luasocket.sln
│       │   │   │   ├── makefile
│       │   │   │   ├── makefile.dist
│       │   │   │   ├── mime.vcxproj
│       │   │   │   ├── mime.vcxproj.filters
│       │   │   │   ├── samples/
│       │   │   │   │   ├── README
│       │   │   │   │   ├── cddb.lua
│       │   │   │   │   ├── daytimeclnt.lua
│       │   │   │   │   ├── echoclnt.lua
│       │   │   │   │   ├── echosrvr.lua
│       │   │   │   │   ├── listener.lua
│       │   │   │   │   ├── lpr.lua
│       │   │   │   │   ├── mclisten.lua
│       │   │   │   │   ├── mcsend.lua
│       │   │   │   │   ├── talker.lua
│       │   │   │   │   └── tinyirc.lua
│       │   │   │   ├── socket.vcxproj
│       │   │   │   ├── socket.vcxproj.filters
│       │   │   │   ├── src/
│       │   │   │   │   ├── auxiliar.c
│       │   │   │   │   ├── auxiliar.h
│       │   │   │   │   ├── buffer.c
│       │   │   │   │   ├── buffer.h
│       │   │   │   │   ├── except.c
│       │   │   │   │   ├── except.h
│       │   │   │   │   ├── ftp.lua
│       │   │   │   │   ├── headers.lua
│       │   │   │   │   ├── http.lua
│       │   │   │   │   ├── inet.c
│       │   │   │   │   ├── inet.h
│       │   │   │   │   ├── io.c
│       │   │   │   │   ├── io.h
│       │   │   │   │   ├── ltn12.lua
│       │   │   │   │   ├── luasocket.c
│       │   │   │   │   ├── luasocket.h
│       │   │   │   │   ├── makefile
│       │   │   │   │   ├── mbox.lua
│       │   │   │   │   ├── mime.c
│       │   │   │   │   ├── mime.h
│       │   │   │   │   ├── mime.lua
│       │   │   │   │   ├── options.c
│       │   │   │   │   ├── options.h
│       │   │   │   │   ├── select.c
│       │   │   │   │   ├── select.h
│       │   │   │   │   ├── serial.c
│       │   │   │   │   ├── smtp.lua
│       │   │   │   │   ├── socket.h
│       │   │   │   │   ├── socket.lua
│       │   │   │   │   ├── tcp.c
│       │   │   │   │   ├── tcp.h
│       │   │   │   │   ├── timeout.c
│       │   │   │   │   ├── timeout.h
│       │   │   │   │   ├── tp.lua
│       │   │   │   │   ├── udp.c
│       │   │   │   │   ├── udp.h
│       │   │   │   │   ├── unix.c
│       │   │   │   │   ├── unix.h
│       │   │   │   │   ├── url.lua
│       │   │   │   │   ├── usocket.c
│       │   │   │   │   ├── usocket.h
│       │   │   │   │   ├── wsocket.c
│       │   │   │   │   └── wsocket.h
│       │   │   │   └── test/
│       │   │   │       ├── README
│       │   │   │       ├── auth/
│       │   │   │       │   ├── .htpasswd
│       │   │   │       │   └── index.html
│       │   │   │       ├── cgi/
│       │   │   │       │   ├── cat
│       │   │   │       │   ├── cat-index-html
│       │   │   │       │   ├── env
│       │   │   │       │   ├── query-string
│       │   │   │       │   ├── redirect-loop
│       │   │   │       │   └── request-uri
│       │   │   │       ├── dicttest.lua
│       │   │   │       ├── excepttest.lua
│       │   │   │       ├── find-connect-limit
│       │   │   │       ├── ftptest.lua
│       │   │   │       ├── hello.lua
│       │   │   │       ├── httptest.lua
│       │   │   │       ├── index.html
│       │   │   │       ├── ltn12test.lua
│       │   │   │       ├── mimetest.lua
│       │   │   │       ├── smtptest.lua
│       │   │   │       ├── stufftest.lua
│       │   │   │       ├── tcp-getoptions
│       │   │   │       ├── test_bind.lua
│       │   │   │       ├── test_getaddrinfo.lua
│       │   │   │       ├── test_socket_error.lua
│       │   │   │       ├── testclnt.lua
│       │   │   │       ├── testmesg.lua
│       │   │   │       ├── testsrvr.lua
│       │   │   │       ├── testsupport.lua
│       │   │   │       ├── tftptest.lua
│       │   │   │       ├── udp-zero-length-send
│       │   │   │       ├── udp-zero-length-send-recv
│       │   │   │       ├── udpconnectclnt.lua
│       │   │   │       ├── udpconnectsrvr.lua
│       │   │   │       ├── unixclnt.lua
│       │   │   │       ├── unixsrvr.lua
│       │   │   │       ├── upload.html
│       │   │   │       ├── urltest.lua
│       │   │   │       ├── utestclnt.lua
│       │   │   │       └── utestsrvr.lua
│       │   │   ├── mongo-c-driver/
│       │   │   │   ├── .clang-format
│       │   │   │   ├── .evergreen/
│       │   │   │   │   ├── .codecov.yml
│       │   │   │   │   ├── abi-compliance-check.sh
│       │   │   │   │   ├── add-build-dirs-to-paths.sh
│       │   │   │   │   ├── benchmark.yml
│       │   │   │   │   ├── build_snapshot_rpm.sh
│       │   │   │   │   ├── check-files.py
│       │   │   │   │   ├── check-installed-files-bson.bat
│       │   │   │   │   ├── check-installed-files.bat
│       │   │   │   │   ├── check-preludes.py
│       │   │   │   │   ├── check-public-decls.sh
│       │   │   │   │   ├── check-release-archive.sh
│       │   │   │   │   ├── check-symlink.sh
│       │   │   │   │   ├── compile-unix.sh
│       │   │   │   │   ├── compile-windows-mingw.bat
│       │   │   │   │   ├── compile-windows.sh
│       │   │   │   │   ├── compile.sh
│       │   │   │   │   ├── config.yml
│       │   │   │   │   ├── debian_package_build.sh
│       │   │   │   │   ├── debug-core-evergreen.sh
│       │   │   │   │   ├── download-mongodb.sh
│       │   │   │   │   ├── find-cmake.sh
│       │   │   │   │   ├── install-ssl.sh
│       │   │   │   │   ├── install-uninstall-check.sh
│       │   │   │   │   ├── integration-tests.sh
│       │   │   │   │   ├── kerberos.realm
│       │   │   │   │   ├── link-sample-program-bson.sh
│       │   │   │   │   ├── link-sample-program.sh
│       │   │   │   │   ├── llvm-gcov.sh
│       │   │   │   │   ├── man-pages-to-html.sh
│       │   │   │   │   ├── run-auth-tests.sh
│       │   │   │   │   ├── run-mock-server-tests.sh
│       │   │   │   │   ├── run-tests-bson.sh
│       │   │   │   │   ├── run-tests-mingw-bson.bat
│       │   │   │   │   ├── run-tests-mingw.bat
│       │   │   │   │   ├── run-tests.sh
│       │   │   │   │   ├── spec.patch
│       │   │   │   │   └── valgrind.sh
│       │   │   │   ├── .gdbinit
│       │   │   │   ├── .gitattributes
│       │   │   │   ├── .gitmodules
│       │   │   │   ├── .lsan-suppressions
│       │   │   │   ├── .travis.scripts/
│       │   │   │   │   └── debug-core.sh
│       │   │   │   ├── .travis.yml
│       │   │   │   ├── CMakeLists.txt
│       │   │   │   ├── CONTRIBUTING.md
│       │   │   │   ├── COPYING
│       │   │   │   ├── NEWS
│       │   │   │   ├── README.rst
│       │   │   │   ├── THIRD_PARTY_NOTICES
│       │   │   │   ├── build/
│       │   │   │   │   ├── .gitignore
│       │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   ├── calc_release_version.py
│       │   │   │   │   ├── cmake/
│       │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   ├── CheckSchedGetCPU.cmake
│       │   │   │   │   │   ├── FindResSearch.cmake
│       │   │   │   │   │   ├── FindSASL2.cmake
│       │   │   │   │   │   ├── FindSnappy.cmake
│       │   │   │   │   │   ├── FindSphinx.cmake
│       │   │   │   │   │   ├── LoadVersion.cmake
│       │   │   │   │   │   ├── MaintainerFlags.cmake
│       │   │   │   │   │   ├── MongoCPackage.cmake
│       │   │   │   │   │   ├── ParseVersion.cmake
│       │   │   │   │   │   ├── SphinxBuild.cmake
│       │   │   │   │   │   └── make_dist/
│       │   │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │   │       ├── COPYING-CMAKE-SCRIPTS.txt
│       │   │   │   │   │       ├── MakeDist.cmake
│       │   │   │   │   │       ├── MakeDistCheck.cmake
│       │   │   │   │   │       └── MakeDistFiles.cmake
│       │   │   │   │   ├── evergreen_config_lib/
│       │   │   │   │   │   ├── __init__.py
│       │   │   │   │   │   ├── functions.py
│       │   │   │   │   │   ├── tasks.py
│       │   │   │   │   │   └── variants.py
│       │   │   │   │   ├── future_function_templates/
│       │   │   │   │   │   ├── future-functions.c.template
│       │   │   │   │   │   ├── future-functions.h.template
│       │   │   │   │   │   ├── future-value.c.template
│       │   │   │   │   │   ├── future-value.h.template
│       │   │   │   │   │   ├── future.c.template
│       │   │   │   │   │   └── future.h.template
│       │   │   │   │   ├── generate-evergreen-config.py
│       │   │   │   │   ├── generate-future-functions.py
│       │   │   │   │   ├── generate-opts.py
│       │   │   │   │   ├── generate-uninstall.sh
│       │   │   │   │   ├── maintainer-flags.txt
│       │   │   │   │   ├── opts_templates/
│       │   │   │   │   │   ├── mongoc-opts-private.h.template
│       │   │   │   │   │   └── mongoc-opts.c.template
│       │   │   │   │   ├── requirements.txt
│       │   │   │   │   └── sphinx/
│       │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │       ├── basic/
│       │   │   │   │       │   ├── changes/
│       │   │   │   │       │   │   ├── frameset.html
│       │   │   │   │       │   │   ├── rstsource.html
│       │   │   │   │       │   │   └── versionchanges.html
│       │   │   │   │       │   ├── defindex.html
│       │   │   │   │       │   ├── domainindex.html
│       │   │   │   │       │   ├── genindex-single.html
│       │   │   │   │       │   ├── genindex-split.html
│       │   │   │   │       │   ├── genindex.html
│       │   │   │   │       │   ├── globaltoc.html
│       │   │   │   │       │   ├── layout.html
│       │   │   │   │       │   ├── localtoc.html
│       │   │   │   │       │   ├── opensearch.xml
│       │   │   │   │       │   ├── page.html
│       │   │   │   │       │   ├── relations.html
│       │   │   │   │       │   ├── search.html
│       │   │   │   │       │   ├── searchbox.html
│       │   │   │   │       │   ├── searchresults.html
│       │   │   │   │       │   ├── sourcelink.html
│       │   │   │   │       │   ├── static/
│       │   │   │   │       │   │   ├── basic.css_t
│       │   │   │   │       │   │   ├── doctools.js_t
│       │   │   │   │       │   │   ├── documentation_options.js_t
│       │   │   │   │       │   │   ├── jquery-3.2.1.js
│       │   │   │   │       │   │   ├── jquery.js
│       │   │   │   │       │   │   ├── searchtools.js_t
│       │   │   │   │       │   │   ├── underscore-1.3.1.js
│       │   │   │   │       │   │   ├── underscore.js
│       │   │   │   │       │   │   └── websupport.js
│       │   │   │   │       │   └── theme.conf
│       │   │   │   │       ├── customindexlink.html
│       │   │   │   │       ├── homepage-config/
│       │   │   │   │       │   ├── .gitignore
│       │   │   │   │       │   ├── conf.py
│       │   │   │   │       │   ├── index.rst
│       │   │   │   │       │   ├── libbson-releases.rst
│       │   │   │   │       │   └── libmongoc-releases.rst
│       │   │   │   │       ├── mongoc/
│       │   │   │   │       │   └── __init__.py
│       │   │   │   │       ├── mongoc_common.py
│       │   │   │   │       ├── readable/
│       │   │   │   │       │   ├── CMakeLists.txt
│       │   │   │   │       │   ├── layout.html
│       │   │   │   │       │   ├── relations.html
│       │   │   │   │       │   ├── static/
│       │   │   │   │       │   │   ├── pygments.css
│       │   │   │   │       │   │   └── readable.css_t
│       │   │   │   │       │   └── theme.conf
│       │   │   │   │       └── taglist.py
│       │   │   │   ├── debian/
│       │   │   │   │   ├── README.source
│       │   │   │   │   ├── build_snapshot.sh
│       │   │   │   │   ├── changelog
│       │   │   │   │   ├── compat
│       │   │   │   │   ├── control
│       │   │   │   │   ├── copyright
│       │   │   │   │   ├── gbp.conf
│       │   │   │   │   ├── libbson-1.0-0.dirs
│       │   │   │   │   ├── libbson-1.0-0.install
│       │   │   │   │   ├── libbson-1.0-0.lintian-overrides
│       │   │   │   │   ├── libbson-dev.dirs
│       │   │   │   │   ├── libbson-dev.docs
│       │   │   │   │   ├── libbson-dev.install
│       │   │   │   │   ├── libbson-doc.dirs
│       │   │   │   │   ├── libbson-doc.doc-base
│       │   │   │   │   ├── libbson-doc.docs
│       │   │   │   │   ├── libbson-doc.lintian-overrides
│       │   │   │   │   ├── libbson-doc.manpages
│       │   │   │   │   ├── libbson-objects.inv
│       │   │   │   │   ├── libmongoc-1.0-0.docs
│       │   │   │   │   ├── libmongoc-1.0-0.install
│       │   │   │   │   ├── libmongoc-1.0-0.lintian-overrides
│       │   │   │   │   ├── libmongoc-dev.docs
│       │   │   │   │   ├── libmongoc-dev.install
│       │   │   │   │   ├── libmongoc-doc.dirs
│       │   │   │   │   ├── libmongoc-doc.doc-base
│       │   │   │   │   ├── libmongoc-doc.docs
│       │   │   │   │   ├── libmongoc-doc.lintian-overrides
│       │   │   │   │   ├── libmongoc-doc.manpages
│       │   │   │   │   ├── rules
│       │   │   │   │   ├── source/
│       │   │   │   │   │   ├── format
│       │   │   │   │   │   ├── include-binaries
│       │   │   │   │   │   └── options
│       │   │   │   │   └── watch
│       │   │   │   ├── generate_uninstall/
│       │   │   │   │   └── CMakeLists.txt
│       │   │   │   ├── include/
│       │   │   │   │   ├── libbson-1.0/
│       │   │   │   │   │   ├── bson/
│       │   │   │   │   │   │   ├── bcon.h
│       │   │   │   │   │   │   ├── bson-atomic.h
│       │   │   │   │   │   │   └── bson-clock.h
│       │   │   │   │   │   └── bson.h
│       │   │   │   │   └── libmongoc-1.0/
│       │   │   │   │       ├── mongoc/
│       │   │   │   │       │   ├── mongoc-apm.h
│       │   │   │   │       │   ├── mongoc-bulk-operation.h
│       │   │   │   │       │   ├── mongoc-change-stream.h
│       │   │   │   │       │   ├── mongoc-client-pool.h
│       │   │   │   │       │   ├── mongoc-client-session.h
│       │   │   │   │       │   ├── mongoc-client-side-encryption.h
│       │   │   │   │       │   ├── mongoc-client.h
│       │   │   │   │       │   ├── mongoc-collection.h
│       │   │   │   │       │   ├── mongoc-config.h
│       │   │   │   │       │   ├── mongoc-cursor.h
│       │   │   │   │       │   ├── mongoc-database.h
│       │   │   │   │       │   ├── mongoc-error.h
│       │   │   │   │       │   ├── mongoc-find-and-modify.h
│       │   │   │   │       │   ├── mongoc-flags.h
│       │   │   │   │       │   ├── mongoc-gridfs-bucket.h
│       │   │   │   │       │   ├── mongoc-gridfs-file-list.h
│       │   │   │   │       │   ├── mongoc-gridfs-file-page.h
│       │   │   │   │       │   ├── mongoc-gridfs-file.h
│       │   │   │   │       │   ├── mongoc-gridfs.h
│       │   │   │   │       │   ├── mongoc-handshake.h
│       │   │   │   │       │   ├── mongoc-host-list.h
│       │   │   │   │       │   ├── mongoc-index.h
│       │   │   │   │       │   ├── mongoc-init.h
│       │   │   │   │       │   ├── mongoc-iovec.h
│       │   │   │   │       │   ├── mongoc-log.h
│       │   │   │   │       │   ├── mongoc-macros.h
│       │   │   │   │       │   ├── mongoc-matcher.h
│       │   │   │   │       │   ├── mongoc-opcode.h
│       │   │   │   │       │   ├── mongoc-prelude.h
│       │   │   │   │       │   ├── mongoc-rand.h
│       │   │   │   │       │   ├── mongoc-read-concern.h
│       │   │   │   │       │   ├── mongoc-read-prefs.h
│       │   │   │   │       │   ├── mongoc-server-description.h
│       │   │   │   │       │   ├── mongoc-socket.h
│       │   │   │   │       │   ├── mongoc-ssl.h
│       │   │   │   │       │   ├── mongoc-stream-buffered.h
│       │   │   │   │       │   ├── mongoc-stream-file.h
│       │   │   │   │       │   ├── mongoc-stream-gridfs.h
│       │   │   │   │       │   ├── mongoc-stream-socket.h
│       │   │   │   │       │   ├── mongoc-stream-tls-libressl.h
│       │   │   │   │       │   ├── mongoc-stream-tls-openssl.h
│       │   │   │   │       │   ├── mongoc-stream-tls.h
│       │   │   │   │       │   ├── mongoc-stream.h
│       │   │   │   │       │   ├── mongoc-topology-description.h
│       │   │   │   │       │   ├── mongoc-uri.h
│       │   │   │   │       │   ├── mongoc-version-functions.h
│       │   │   │   │       │   ├── mongoc-version.h
│       │   │   │   │       │   ├── mongoc-write-concern.h
│       │   │   │   │       │   └── mongoc.h
│       │   │   │   │       └── mongoc.h
│       │   │   │   ├── lldb_bson.py
│       │   │   │   ├── orchestration_configs/
│       │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   ├── replica_sets/
│       │   │   │   │   │   ├── auth-ssl.json
│       │   │   │   │   │   ├── auth-thisDB-ssl.json
│       │   │   │   │   │   ├── auth.json
│       │   │   │   │   │   ├── basic-ssl.json
│       │   │   │   │   │   └── basic.json
│       │   │   │   │   ├── servers/
│       │   │   │   │   │   ├── auth-ssl.json
│       │   │   │   │   │   ├── auth.json
│       │   │   │   │   │   ├── basic-ipv4-only.json
│       │   │   │   │   │   ├── basic-ssl.json
│       │   │   │   │   │   ├── basic.json
│       │   │   │   │   │   ├── mmapv1.json
│       │   │   │   │   │   ├── snappy-zlib-zstd.json
│       │   │   │   │   │   ├── snappy.json
│       │   │   │   │   │   ├── wiredtiger.json
│       │   │   │   │   │   ├── zlib.json
│       │   │   │   │   │   └── zstd.json
│       │   │   │   │   └── sharded_clusters/
│       │   │   │   │       ├── auth-ssl.json
│       │   │   │   │       ├── auth.json
│       │   │   │   │       ├── basic-ssl.json
│       │   │   │   │       └── basic.json
│       │   │   │   ├── src/
│       │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   ├── common/
│       │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   ├── common-b64-private.h
│       │   │   │   │   │   ├── common-b64.c
│       │   │   │   │   │   ├── common-md5-private.h
│       │   │   │   │   │   ├── common-md5.c
│       │   │   │   │   │   ├── common-prelude.h
│       │   │   │   │   │   └── common-thread-private.h
│       │   │   │   │   ├── libbson/
│       │   │   │   │   │   ├── .gitattributes
│       │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   ├── NEWS
│       │   │   │   │   │   ├── THIRD_PARTY_NOTICES
│       │   │   │   │   │   ├── build/
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── cmake/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── BSONPackage.cmake
│       │   │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   │   ├── CheckAtomics.cmake
│       │   │   │   │   │   │   │   ├── libbson-1.0-config-version.cmake.in
│       │   │   │   │   │   │   │   ├── libbson-1.0-config.cmake.in
│       │   │   │   │   │   │   │   ├── libbson-static-1.0-config-version.cmake.in
│       │   │   │   │   │   │   │   └── libbson-static-1.0-config.cmake.in
│       │   │   │   │   │   │   └── maintainer-flags.txt
│       │   │   │   │   │   ├── doc/
│       │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── api.rst
│       │   │   │   │   │   │   ├── bson_append_array.rst
│       │   │   │   │   │   │   ├── bson_append_array_begin.rst
│       │   │   │   │   │   │   ├── bson_append_array_end.rst
│       │   │   │   │   │   │   ├── bson_append_binary.rst
│       │   │   │   │   │   │   ├── bson_append_bool.rst
│       │   │   │   │   │   │   ├── bson_append_code.rst
│       │   │   │   │   │   │   ├── bson_append_code_with_scope.rst
│       │   │   │   │   │   │   ├── bson_append_date_time.rst
│       │   │   │   │   │   │   ├── bson_append_dbpointer.rst
│       │   │   │   │   │   │   ├── bson_append_decimal128.rst
│       │   │   │   │   │   │   ├── bson_append_document.rst
│       │   │   │   │   │   │   ├── bson_append_document_begin.rst
│       │   │   │   │   │   │   ├── bson_append_document_end.rst
│       │   │   │   │   │   │   ├── bson_append_double.rst
│       │   │   │   │   │   │   ├── bson_append_int32.rst
│       │   │   │   │   │   │   ├── bson_append_int64.rst
│       │   │   │   │   │   │   ├── bson_append_iter.rst
│       │   │   │   │   │   │   ├── bson_append_maxkey.rst
│       │   │   │   │   │   │   ├── bson_append_minkey.rst
│       │   │   │   │   │   │   ├── bson_append_now_utc.rst
│       │   │   │   │   │   │   ├── bson_append_null.rst
│       │   │   │   │   │   │   ├── bson_append_oid.rst
│       │   │   │   │   │   │   ├── bson_append_regex.rst
│       │   │   │   │   │   │   ├── bson_append_regex_w_len.rst
│       │   │   │   │   │   │   ├── bson_append_symbol.rst
│       │   │   │   │   │   │   ├── bson_append_time_t.rst
│       │   │   │   │   │   │   ├── bson_append_timestamp.rst
│       │   │   │   │   │   │   ├── bson_append_timeval.rst
│       │   │   │   │   │   │   ├── bson_append_undefined.rst
│       │   │   │   │   │   │   ├── bson_append_utf8.rst
│       │   │   │   │   │   │   ├── bson_append_value.rst
│       │   │   │   │   │   │   ├── bson_array_as_json.rst
│       │   │   │   │   │   │   ├── bson_as_canonical_extended_json.rst
│       │   │   │   │   │   │   ├── bson_as_json.rst
│       │   │   │   │   │   │   ├── bson_as_relaxed_extended_json.rst
│       │   │   │   │   │   │   ├── bson_ascii_strtoll.rst
│       │   │   │   │   │   │   ├── bson_check_version.rst
│       │   │   │   │   │   │   ├── bson_compare.rst
│       │   │   │   │   │   │   ├── bson_concat.rst
│       │   │   │   │   │   │   ├── bson_context_destroy.rst
│       │   │   │   │   │   │   ├── bson_context_get_default.rst
│       │   │   │   │   │   │   ├── bson_context_new.rst
│       │   │   │   │   │   │   ├── bson_context_t.rst
│       │   │   │   │   │   │   ├── bson_copy.rst
│       │   │   │   │   │   │   ├── bson_copy_to.rst
│       │   │   │   │   │   │   ├── bson_copy_to_excluding.rst
│       │   │   │   │   │   │   ├── bson_copy_to_excluding_noinit.rst
│       │   │   │   │   │   │   ├── bson_copy_to_excluding_noinit_va.rst
│       │   │   │   │   │   │   ├── bson_count_keys.rst
│       │   │   │   │   │   │   ├── bson_decimal128_from_string.rst
│       │   │   │   │   │   │   ├── bson_decimal128_from_string_w_len.rst
│       │   │   │   │   │   │   ├── bson_decimal128_t.rst
│       │   │   │   │   │   │   ├── bson_decimal128_to_string.rst
│       │   │   │   │   │   │   ├── bson_destroy.rst
│       │   │   │   │   │   │   ├── bson_destroy_with_steal.rst
│       │   │   │   │   │   │   ├── bson_equal.rst
│       │   │   │   │   │   │   ├── bson_error_t.rst
│       │   │   │   │   │   │   ├── bson_free.rst
│       │   │   │   │   │   │   ├── bson_get_data.rst
│       │   │   │   │   │   │   ├── bson_get_major_version.rst
│       │   │   │   │   │   │   ├── bson_get_micro_version.rst
│       │   │   │   │   │   │   ├── bson_get_minor_version.rst
│       │   │   │   │   │   │   ├── bson_get_monotonic_time.rst
│       │   │   │   │   │   │   ├── bson_get_version.rst
│       │   │   │   │   │   │   ├── bson_has_field.rst
│       │   │   │   │   │   │   ├── bson_init.rst
│       │   │   │   │   │   │   ├── bson_init_from_json.rst
│       │   │   │   │   │   │   ├── bson_init_static.rst
│       │   │   │   │   │   │   ├── bson_isspace.rst
│       │   │   │   │   │   │   ├── bson_iter_array.rst
│       │   │   │   │   │   │   ├── bson_iter_as_bool.rst
│       │   │   │   │   │   │   ├── bson_iter_as_double.rst
│       │   │   │   │   │   │   ├── bson_iter_as_int64.rst
│       │   │   │   │   │   │   ├── bson_iter_binary.rst
│       │   │   │   │   │   │   ├── bson_iter_bool.rst
│       │   │   │   │   │   │   ├── bson_iter_code.rst
│       │   │   │   │   │   │   ├── bson_iter_codewscope.rst
│       │   │   │   │   │   │   ├── bson_iter_date_time.rst
│       │   │   │   │   │   │   ├── bson_iter_dbpointer.rst
│       │   │   │   │   │   │   ├── bson_iter_decimal128.rst
│       │   │   │   │   │   │   ├── bson_iter_document.rst
│       │   │   │   │   │   │   ├── bson_iter_double.rst
│       │   │   │   │   │   │   ├── bson_iter_dup_utf8.rst
│       │   │   │   │   │   │   ├── bson_iter_find.rst
│       │   │   │   │   │   │   ├── bson_iter_find_case.rst
│       │   │   │   │   │   │   ├── bson_iter_find_descendant.rst
│       │   │   │   │   │   │   ├── bson_iter_find_w_len.rst
│       │   │   │   │   │   │   ├── bson_iter_init.rst
│       │   │   │   │   │   │   ├── bson_iter_init_find.rst
│       │   │   │   │   │   │   ├── bson_iter_init_find_case.rst
│       │   │   │   │   │   │   ├── bson_iter_init_find_w_len.rst
│       │   │   │   │   │   │   ├── bson_iter_init_from_data.rst
│       │   │   │   │   │   │   ├── bson_iter_init_from_data_at_offset.rst
│       │   │   │   │   │   │   ├── bson_iter_int32.rst
│       │   │   │   │   │   │   ├── bson_iter_int64.rst
│       │   │   │   │   │   │   ├── bson_iter_key.rst
│       │   │   │   │   │   │   ├── bson_iter_key_len.rst
│       │   │   │   │   │   │   ├── bson_iter_next.rst
│       │   │   │   │   │   │   ├── bson_iter_offset.rst
│       │   │   │   │   │   │   ├── bson_iter_oid.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_bool.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_date_time.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_decimal128.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_double.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_int32.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_int64.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_oid.rst
│       │   │   │   │   │   │   ├── bson_iter_overwrite_timestamp.rst
│       │   │   │   │   │   │   ├── bson_iter_recurse.rst
│       │   │   │   │   │   │   ├── bson_iter_regex.rst
│       │   │   │   │   │   │   ├── bson_iter_symbol.rst
│       │   │   │   │   │   │   ├── bson_iter_t.rst
│       │   │   │   │   │   │   ├── bson_iter_time_t.rst
│       │   │   │   │   │   │   ├── bson_iter_timestamp.rst
│       │   │   │   │   │   │   ├── bson_iter_timeval.rst
│       │   │   │   │   │   │   ├── bson_iter_type.rst
│       │   │   │   │   │   │   ├── bson_iter_utf8.rst
│       │   │   │   │   │   │   ├── bson_iter_value.rst
│       │   │   │   │   │   │   ├── bson_iter_visit_all.rst
│       │   │   │   │   │   │   ├── bson_json_data_reader_ingest.rst
│       │   │   │   │   │   │   ├── bson_json_data_reader_new.rst
│       │   │   │   │   │   │   ├── bson_json_reader_destroy.rst
│       │   │   │   │   │   │   ├── bson_json_reader_new.rst
│       │   │   │   │   │   │   ├── bson_json_reader_new_from_fd.rst
│       │   │   │   │   │   │   ├── bson_json_reader_new_from_file.rst
│       │   │   │   │   │   │   ├── bson_json_reader_read.rst
│       │   │   │   │   │   │   ├── bson_json_reader_t.rst
│       │   │   │   │   │   │   ├── bson_malloc.rst
│       │   │   │   │   │   │   ├── bson_malloc0.rst
│       │   │   │   │   │   │   ├── bson_md5_append.rst
│       │   │   │   │   │   │   ├── bson_md5_finish.rst
│       │   │   │   │   │   │   ├── bson_md5_init.rst
│       │   │   │   │   │   │   ├── bson_md5_t.rst
│       │   │   │   │   │   │   ├── bson_mem_restore_vtable.rst
│       │   │   │   │   │   │   ├── bson_mem_set_vtable.rst
│       │   │   │   │   │   │   ├── bson_memory.rst
│       │   │   │   │   │   │   ├── bson_new.rst
│       │   │   │   │   │   │   ├── bson_new_from_buffer.rst
│       │   │   │   │   │   │   ├── bson_new_from_data.rst
│       │   │   │   │   │   │   ├── bson_new_from_json.rst
│       │   │   │   │   │   │   ├── bson_oid_compare.rst
│       │   │   │   │   │   │   ├── bson_oid_copy.rst
│       │   │   │   │   │   │   ├── bson_oid_equal.rst
│       │   │   │   │   │   │   ├── bson_oid_get_time_t.rst
│       │   │   │   │   │   │   ├── bson_oid_hash.rst
│       │   │   │   │   │   │   ├── bson_oid_init.rst
│       │   │   │   │   │   │   ├── bson_oid_init_from_data.rst
│       │   │   │   │   │   │   ├── bson_oid_init_from_string.rst
│       │   │   │   │   │   │   ├── bson_oid_init_sequence.rst
│       │   │   │   │   │   │   ├── bson_oid_is_valid.rst
│       │   │   │   │   │   │   ├── bson_oid_t.rst
│       │   │   │   │   │   │   ├── bson_oid_to_string.rst
│       │   │   │   │   │   │   ├── bson_reader_destroy.rst
│       │   │   │   │   │   │   ├── bson_reader_destroy_func_t.rst
│       │   │   │   │   │   │   ├── bson_reader_new_from_data.rst
│       │   │   │   │   │   │   ├── bson_reader_new_from_fd.rst
│       │   │   │   │   │   │   ├── bson_reader_new_from_file.rst
│       │   │   │   │   │   │   ├── bson_reader_new_from_handle.rst
│       │   │   │   │   │   │   ├── bson_reader_read.rst
│       │   │   │   │   │   │   ├── bson_reader_read_func_t.rst
│       │   │   │   │   │   │   ├── bson_reader_reset.rst
│       │   │   │   │   │   │   ├── bson_reader_set_destroy_func.rst
│       │   │   │   │   │   │   ├── bson_reader_set_read_func.rst
│       │   │   │   │   │   │   ├── bson_reader_t.rst
│       │   │   │   │   │   │   ├── bson_reader_tell.rst
│       │   │   │   │   │   │   ├── bson_realloc.rst
│       │   │   │   │   │   │   ├── bson_realloc_ctx.rst
│       │   │   │   │   │   │   ├── bson_realloc_func.rst
│       │   │   │   │   │   │   ├── bson_reinit.rst
│       │   │   │   │   │   │   ├── bson_reserve_buffer.rst
│       │   │   │   │   │   │   ├── bson_set_error.rst
│       │   │   │   │   │   │   ├── bson_sized_new.rst
│       │   │   │   │   │   │   ├── bson_snprintf.rst
│       │   │   │   │   │   │   ├── bson_steal.rst
│       │   │   │   │   │   │   ├── bson_strcasecmp.rst
│       │   │   │   │   │   │   ├── bson_strdup.rst
│       │   │   │   │   │   │   ├── bson_strdup_printf.rst
│       │   │   │   │   │   │   ├── bson_strdupv_printf.rst
│       │   │   │   │   │   │   ├── bson_strerror_r.rst
│       │   │   │   │   │   │   ├── bson_strfreev.rst
│       │   │   │   │   │   │   ├── bson_string_append.rst
│       │   │   │   │   │   │   ├── bson_string_append_c.rst
│       │   │   │   │   │   │   ├── bson_string_append_printf.rst
│       │   │   │   │   │   │   ├── bson_string_append_unichar.rst
│       │   │   │   │   │   │   ├── bson_string_free.rst
│       │   │   │   │   │   │   ├── bson_string_new.rst
│       │   │   │   │   │   │   ├── bson_string_t.rst
│       │   │   │   │   │   │   ├── bson_string_truncate.rst
│       │   │   │   │   │   │   ├── bson_strncpy.rst
│       │   │   │   │   │   │   ├── bson_strndup.rst
│       │   │   │   │   │   │   ├── bson_strnlen.rst
│       │   │   │   │   │   │   ├── bson_subtype_t.rst
│       │   │   │   │   │   │   ├── bson_t.rst
│       │   │   │   │   │   │   ├── bson_type_t.rst
│       │   │   │   │   │   │   ├── bson_uint32_to_string.rst
│       │   │   │   │   │   │   ├── bson_unichar_t.rst
│       │   │   │   │   │   │   ├── bson_utf8_escape_for_json.rst
│       │   │   │   │   │   │   ├── bson_utf8_from_unichar.rst
│       │   │   │   │   │   │   ├── bson_utf8_get_char.rst
│       │   │   │   │   │   │   ├── bson_utf8_next_char.rst
│       │   │   │   │   │   │   ├── bson_utf8_validate.rst
│       │   │   │   │   │   │   ├── bson_validate.rst
│       │   │   │   │   │   │   ├── bson_validate_with_error.rst
│       │   │   │   │   │   │   ├── bson_value_copy.rst
│       │   │   │   │   │   │   ├── bson_value_destroy.rst
│       │   │   │   │   │   │   ├── bson_value_t.rst
│       │   │   │   │   │   │   ├── bson_visitor_t.rst
│       │   │   │   │   │   │   ├── bson_vsnprintf.rst
│       │   │   │   │   │   │   ├── bson_writer_begin.rst
│       │   │   │   │   │   │   ├── bson_writer_destroy.rst
│       │   │   │   │   │   │   ├── bson_writer_end.rst
│       │   │   │   │   │   │   ├── bson_writer_get_length.rst
│       │   │   │   │   │   │   ├── bson_writer_new.rst
│       │   │   │   │   │   │   ├── bson_writer_rollback.rst
│       │   │   │   │   │   │   ├── bson_writer_t.rst
│       │   │   │   │   │   │   ├── bson_zero_free.rst
│       │   │   │   │   │   │   ├── character_and_string_routines.rst
│       │   │   │   │   │   │   ├── conf.py
│       │   │   │   │   │   │   ├── creating.rst
│       │   │   │   │   │   │   ├── cross-platform-notes.rst
│       │   │   │   │   │   │   ├── endianness.rst
│       │   │   │   │   │   │   ├── errors.rst
│       │   │   │   │   │   │   ├── full_index.rst
│       │   │   │   │   │   │   ├── guides.rst
│       │   │   │   │   │   │   ├── html/
│       │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   ├── include-and-link.rst
│       │   │   │   │   │   │   ├── index.rst
│       │   │   │   │   │   │   ├── json.rst
│       │   │   │   │   │   │   ├── man/
│       │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   ├── oid.rst
│       │   │   │   │   │   │   ├── parsing.rst
│       │   │   │   │   │   │   ├── streaming-bson.rst
│       │   │   │   │   │   │   ├── taglist.py
│       │   │   │   │   │   │   ├── threading.rst
│       │   │   │   │   │   │   ├── tutorial.rst
│       │   │   │   │   │   │   ├── utf8.rst
│       │   │   │   │   │   │   ├── valgrind.rst
│       │   │   │   │   │   │   └── version.rst
│       │   │   │   │   │   ├── examples/
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── bcon-col-view.c
│       │   │   │   │   │   │   ├── bcon-speed.c
│       │   │   │   │   │   │   ├── bson-check-depth.c
│       │   │   │   │   │   │   ├── bson-metrics.c
│       │   │   │   │   │   │   ├── bson-streaming-reader.c
│       │   │   │   │   │   │   ├── bson-to-json.c
│       │   │   │   │   │   │   ├── bson-validate.c
│       │   │   │   │   │   │   ├── cmake/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── find_package/
│       │   │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   │   └── find_package_static/
│       │   │   │   │   │   │   │       └── CMakeLists.txt
│       │   │   │   │   │   │   ├── cmake-deprecated/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── find_package/
│       │   │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   │   └── find_package_static/
│       │   │   │   │   │   │   │       └── CMakeLists.txt
│       │   │   │   │   │   │   ├── compile-with-pkg-config-static.sh
│       │   │   │   │   │   │   ├── compile-with-pkg-config.sh
│       │   │   │   │   │   │   ├── hello_bson.c
│       │   │   │   │   │   │   ├── json-to-bson.c
│       │   │   │   │   │   │   ├── manual_build_against_deprecated_lib_prefix/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── hello_bson.sln
│       │   │   │   │   │   │   │   ├── hello_bson.vcxproj
│       │   │   │   │   │   │   │   └── hello_bson.vcxproj.filters
│       │   │   │   │   │   │   └── manual_build_against_deprecated_lib_prefix_static/
│       │   │   │   │   │   │       ├── .gitignore
│       │   │   │   │   │   │       ├── hello_bson.sln
│       │   │   │   │   │   │       ├── hello_bson.vcxproj
│       │   │   │   │   │   │       └── hello_bson.vcxproj.filters
│       │   │   │   │   │   ├── src/
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── bson/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   │   ├── bcon.c
│       │   │   │   │   │   │   │   ├── bcon.h
│       │   │   │   │   │   │   │   ├── bson-atomic.c
│       │   │   │   │   │   │   │   ├── bson-atomic.h
│       │   │   │   │   │   │   │   ├── bson-clock.c
│       │   │   │   │   │   │   │   ├── bson-clock.h
│       │   │   │   │   │   │   │   ├── bson-compat.h
│       │   │   │   │   │   │   │   ├── bson-config.h.in
│       │   │   │   │   │   │   │   ├── bson-context-private.h
│       │   │   │   │   │   │   │   ├── bson-context.c
│       │   │   │   │   │   │   │   ├── bson-context.h
│       │   │   │   │   │   │   │   ├── bson-decimal128.c
│       │   │   │   │   │   │   │   ├── bson-decimal128.h
│       │   │   │   │   │   │   │   ├── bson-endian.h
│       │   │   │   │   │   │   │   ├── bson-error.c
│       │   │   │   │   │   │   │   ├── bson-error.h
│       │   │   │   │   │   │   │   ├── bson-iso8601-private.h
│       │   │   │   │   │   │   │   ├── bson-iso8601.c
│       │   │   │   │   │   │   │   ├── bson-iter.c
│       │   │   │   │   │   │   │   ├── bson-iter.h
│       │   │   │   │   │   │   │   ├── bson-json.c
│       │   │   │   │   │   │   │   ├── bson-json.h
│       │   │   │   │   │   │   │   ├── bson-keys.c
│       │   │   │   │   │   │   │   ├── bson-keys.h
│       │   │   │   │   │   │   │   ├── bson-macros.h
│       │   │   │   │   │   │   │   ├── bson-md5.c
│       │   │   │   │   │   │   │   ├── bson-md5.h
│       │   │   │   │   │   │   │   ├── bson-memory.c
│       │   │   │   │   │   │   │   ├── bson-memory.h
│       │   │   │   │   │   │   │   ├── bson-oid.c
│       │   │   │   │   │   │   │   ├── bson-oid.h
│       │   │   │   │   │   │   │   ├── bson-prelude.h
│       │   │   │   │   │   │   │   ├── bson-private.h
│       │   │   │   │   │   │   │   ├── bson-reader.c
│       │   │   │   │   │   │   │   ├── bson-reader.h
│       │   │   │   │   │   │   │   ├── bson-string.c
│       │   │   │   │   │   │   │   ├── bson-string.h
│       │   │   │   │   │   │   │   ├── bson-timegm-private.h
│       │   │   │   │   │   │   │   ├── bson-timegm.c
│       │   │   │   │   │   │   │   ├── bson-types.h
│       │   │   │   │   │   │   │   ├── bson-utf8.c
│       │   │   │   │   │   │   │   ├── bson-utf8.h
│       │   │   │   │   │   │   │   ├── bson-value.c
│       │   │   │   │   │   │   │   ├── bson-value.h
│       │   │   │   │   │   │   │   ├── bson-version-functions.c
│       │   │   │   │   │   │   │   ├── bson-version-functions.h
│       │   │   │   │   │   │   │   ├── bson-version.h.in
│       │   │   │   │   │   │   │   ├── bson-writer.c
│       │   │   │   │   │   │   │   ├── bson-writer.h
│       │   │   │   │   │   │   │   ├── bson.c
│       │   │   │   │   │   │   │   ├── bson.h
│       │   │   │   │   │   │   │   └── forwarding/
│       │   │   │   │   │   │   │       └── bson.h
│       │   │   │   │   │   │   ├── bson-config.cmake
│       │   │   │   │   │   │   ├── jsonsl/
│       │   │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   │   ├── LICENSE
│       │   │   │   │   │   │   │   ├── jsonsl.c
│       │   │   │   │   │   │   │   └── jsonsl.h
│       │   │   │   │   │   │   ├── libbson-1.0.pc.in
│       │   │   │   │   │   │   └── libbson-static-1.0.pc.in
│       │   │   │   │   │   └── tests/
│       │   │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │   │       ├── binary/
│       │   │   │   │   │       │   ├── binary_deprecated.bson
│       │   │   │   │   │       │   ├── cdriver2269.bson
│       │   │   │   │   │       │   ├── code_w_empty_scope.bson
│       │   │   │   │   │       │   ├── codewscope.bson
│       │   │   │   │   │       │   ├── dollarquery.bson
│       │   │   │   │   │       │   ├── dotkey.bson
│       │   │   │   │   │       │   ├── dotquery.bson
│       │   │   │   │   │       │   ├── empty_key.bson
│       │   │   │   │   │       │   ├── eurokey.bson
│       │   │   │   │   │       │   ├── overflow1.bson
│       │   │   │   │   │       │   ├── overflow2.bson
│       │   │   │   │   │       │   ├── overflow3.bson
│       │   │   │   │   │       │   ├── overflow4.bson
│       │   │   │   │   │       │   ├── readergrow.bson
│       │   │   │   │   │       │   ├── stackoverflow.bson
│       │   │   │   │   │       │   ├── stream.bson
│       │   │   │   │   │       │   ├── stream_corrupt.bson
│       │   │   │   │   │       │   ├── test1.bson
│       │   │   │   │   │       │   ├── test10.bson
│       │   │   │   │   │       │   ├── test11.bson
│       │   │   │   │   │       │   ├── test12.bson
│       │   │   │   │   │       │   ├── test13.bson
│       │   │   │   │   │       │   ├── test14.bson
│       │   │   │   │   │       │   ├── test15.bson
│       │   │   │   │   │       │   ├── test16.bson
│       │   │   │   │   │       │   ├── test17.bson
│       │   │   │   │   │       │   ├── test18.bson
│       │   │   │   │   │       │   ├── test19.bson
│       │   │   │   │   │       │   ├── test2.bson
│       │   │   │   │   │       │   ├── test20.bson
│       │   │   │   │   │       │   ├── test21.bson
│       │   │   │   │   │       │   ├── test22.bson
│       │   │   │   │   │       │   ├── test23.bson
│       │   │   │   │   │       │   ├── test24.bson
│       │   │   │   │   │       │   ├── test25.bson
│       │   │   │   │   │       │   ├── test26.bson
│       │   │   │   │   │       │   ├── test27.bson
│       │   │   │   │   │       │   ├── test28.bson
│       │   │   │   │   │       │   ├── test29.bson
│       │   │   │   │   │       │   ├── test3.bson
│       │   │   │   │   │       │   ├── test30.bson
│       │   │   │   │   │       │   ├── test31.bson
│       │   │   │   │   │       │   ├── test32.bson
│       │   │   │   │   │       │   ├── test33.bson
│       │   │   │   │   │       │   ├── test34.bson
│       │   │   │   │   │       │   ├── test35.bson
│       │   │   │   │   │       │   ├── test36.bson
│       │   │   │   │   │       │   ├── test37.bson
│       │   │   │   │   │       │   ├── test38.bson
│       │   │   │   │   │       │   ├── test39.bson
│       │   │   │   │   │       │   ├── test4.bson
│       │   │   │   │   │       │   ├── test40.bson
│       │   │   │   │   │       │   ├── test41.bson
│       │   │   │   │   │       │   ├── test42.bson
│       │   │   │   │   │       │   ├── test43.bson
│       │   │   │   │   │       │   ├── test44.bson
│       │   │   │   │   │       │   ├── test45.bson
│       │   │   │   │   │       │   ├── test46.bson
│       │   │   │   │   │       │   ├── test47.bson
│       │   │   │   │   │       │   ├── test48.bson
│       │   │   │   │   │       │   ├── test49.bson
│       │   │   │   │   │       │   ├── test5.bson
│       │   │   │   │   │       │   ├── test50.bson
│       │   │   │   │   │       │   ├── test51.bson
│       │   │   │   │   │       │   ├── test52.bson
│       │   │   │   │   │       │   ├── test53.bson
│       │   │   │   │   │       │   ├── test54.bson
│       │   │   │   │   │       │   ├── test55.bson
│       │   │   │   │   │       │   ├── test56.bson
│       │   │   │   │   │       │   ├── test57.bson
│       │   │   │   │   │       │   ├── test58.bson
│       │   │   │   │   │       │   ├── test59.bson
│       │   │   │   │   │       │   ├── test6.bson
│       │   │   │   │   │       │   ├── test7.bson
│       │   │   │   │   │       │   ├── test8.bson
│       │   │   │   │   │       │   ├── test9.bson
│       │   │   │   │   │       │   └── trailingnull.bson
│       │   │   │   │   │       ├── corpus-test.c
│       │   │   │   │   │       ├── corpus-test.h
│       │   │   │   │   │       ├── json/
│       │   │   │   │   │       │   ├── bson_corpus/
│       │   │   │   │   │       │   │   ├── array.json
│       │   │   │   │   │       │   │   ├── binary.json
│       │   │   │   │   │       │   │   ├── boolean.json
│       │   │   │   │   │       │   │   ├── code.json
│       │   │   │   │   │       │   │   ├── code_w_scope.json
│       │   │   │   │   │       │   │   ├── datetime.json
│       │   │   │   │   │       │   │   ├── dbpointer.json
│       │   │   │   │   │       │   │   ├── dbref.json
│       │   │   │   │   │       │   │   ├── decimal128-1.json
│       │   │   │   │   │       │   │   ├── decimal128-2.json
│       │   │   │   │   │       │   │   ├── decimal128-3.json
│       │   │   │   │   │       │   │   ├── decimal128-4.json
│       │   │   │   │   │       │   │   ├── decimal128-5.json
│       │   │   │   │   │       │   │   ├── decimal128-6.json
│       │   │   │   │   │       │   │   ├── decimal128-7.json
│       │   │   │   │   │       │   │   ├── decimal128-mongoc.json
│       │   │   │   │   │       │   │   ├── document.json
│       │   │   │   │   │       │   │   ├── double.json
│       │   │   │   │   │       │   │   ├── double2.json
│       │   │   │   │   │       │   │   ├── int32.json
│       │   │   │   │   │       │   │   ├── int64.json
│       │   │   │   │   │       │   │   ├── maxkey.json
│       │   │   │   │   │       │   │   ├── minkey.json
│       │   │   │   │   │       │   │   ├── multi-type-deprecated.json
│       │   │   │   │   │       │   │   ├── multi-type.json
│       │   │   │   │   │       │   │   ├── null.json
│       │   │   │   │   │       │   │   ├── oid.json
│       │   │   │   │   │       │   │   ├── regex.json
│       │   │   │   │   │       │   │   ├── string.json
│       │   │   │   │   │       │   │   ├── symbol.json
│       │   │   │   │   │       │   │   ├── timestamp.json
│       │   │   │   │   │       │   │   ├── top.json
│       │   │   │   │   │       │   │   └── undefined.json
│       │   │   │   │   │       │   └── test.json
│       │   │   │   │   │       ├── test-atomic.c
│       │   │   │   │   │       ├── test-bcon-basic.c
│       │   │   │   │   │       ├── test-bcon-extract.c
│       │   │   │   │   │       ├── test-bson-corpus.c
│       │   │   │   │   │       ├── test-bson-error.c
│       │   │   │   │   │       ├── test-bson-version.c
│       │   │   │   │   │       ├── test-bson.c
│       │   │   │   │   │       ├── test-clock.c
│       │   │   │   │   │       ├── test-decimal128.c
│       │   │   │   │   │       ├── test-endian.c
│       │   │   │   │   │       ├── test-iso8601.c
│       │   │   │   │   │       ├── test-iter.c
│       │   │   │   │   │       ├── test-json.c
│       │   │   │   │   │       ├── test-oid.c
│       │   │   │   │   │       ├── test-reader.c
│       │   │   │   │   │       ├── test-string.c
│       │   │   │   │   │       ├── test-utf8.c
│       │   │   │   │   │       ├── test-value.c
│       │   │   │   │   │       └── test-writer.c
│       │   │   │   │   ├── libmongoc/
│       │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   ├── THIRD_PARTY_NOTICES
│       │   │   │   │   │   ├── build/
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   └── cmake/
│       │   │   │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │   │   │       ├── libmongoc-1.0-config-version.cmake.in
│       │   │   │   │   │   │       ├── libmongoc-1.0-config.cmake.in
│       │   │   │   │   │   │       ├── libmongoc-static-1.0-config-version.cmake.in
│       │   │   │   │   │   │       └── libmongoc-static-1.0-config.cmake.in
│       │   │   │   │   │   ├── doc/
│       │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── advanced-connections.rst
│       │   │   │   │   │   │   ├── aggregate.rst
│       │   │   │   │   │   │   ├── api.rst
│       │   │   │   │   │   │   ├── application-performance-monitoring.rst
│       │   │   │   │   │   │   ├── authentication.rst
│       │   │   │   │   │   │   ├── basic-troubleshooting.rst
│       │   │   │   │   │   │   ├── bulk.rst
│       │   │   │   │   │   │   ├── conf.py
│       │   │   │   │   │   │   ├── connection-pooling.rst
│       │   │   │   │   │   │   ├── create-indexes.rst
│       │   │   │   │   │   │   ├── cursors.rst
│       │   │   │   │   │   │   ├── debugging.rst
│       │   │   │   │   │   │   ├── distinct-mapreduce.rst
│       │   │   │   │   │   │   ├── errors.rst
│       │   │   │   │   │   │   ├── full_index.rst
│       │   │   │   │   │   │   ├── gridfs.rst
│       │   │   │   │   │   │   ├── guides.rst
│       │   │   │   │   │   │   ├── html/
│       │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   ├── includes/
│       │   │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   │   ├── aggregate-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-insert-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-remove-many-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-remove-one-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-remove-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-replace-one-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-update-many-opts.txt
│       │   │   │   │   │   │   │   ├── bulk-update-one-opts.txt
│       │   │   │   │   │   │   │   ├── cast-away-td-const.txt
│       │   │   │   │   │   │   │   ├── change-stream-opts.txt
│       │   │   │   │   │   │   │   ├── create-index-opts.txt
│       │   │   │   │   │   │   │   ├── delete-many-opts.txt
│       │   │   │   │   │   │   │   ├── delete-one-opts.txt
│       │   │   │   │   │   │   │   ├── generic-opts.txt
│       │   │   │   │   │   │   │   ├── gridfs-bucket-opts.txt
│       │   │   │   │   │   │   │   ├── gridfs-bucket-upload-opts.txt
│       │   │   │   │   │   │   │   ├── init_cleanup.txt
│       │   │   │   │   │   │   │   ├── insert-many-opts.txt
│       │   │   │   │   │   │   │   ├── insert-one-opts.txt
│       │   │   │   │   │   │   │   ├── ipv4-and-ipv6.txt
│       │   │   │   │   │   │   │   ├── mongoc_client_pool_call_once.txt
│       │   │   │   │   │   │   │   ├── mongoc_client_pool_thread_safe.txt
│       │   │   │   │   │   │   │   ├── not-retryable-read.txt
│       │   │   │   │   │   │   │   ├── opts-sources.txt
│       │   │   │   │   │   │   │   ├── read-cmd-opts-sources.txt
│       │   │   │   │   │   │   │   ├── read-opts-sources.txt
│       │   │   │   │   │   │   │   ├── read-opts.txt
│       │   │   │   │   │   │   │   ├── read-write-opts-sources.txt
│       │   │   │   │   │   │   │   ├── read-write-opts.txt
│       │   │   │   │   │   │   │   ├── replace-one-opts.txt
│       │   │   │   │   │   │   │   ├── retryable-read-aggregate.txt
│       │   │   │   │   │   │   │   ├── retryable-read-command.txt
│       │   │   │   │   │   │   │   ├── retryable-read.txt
│       │   │   │   │   │   │   │   ├── session-lifecycle.txt
│       │   │   │   │   │   │   │   ├── update-many-opts.txt
│       │   │   │   │   │   │   │   ├── update-one-opts.txt
│       │   │   │   │   │   │   │   ├── write-opts-sources.txt
│       │   │   │   │   │   │   │   └── write-opts.txt
│       │   │   │   │   │   │   ├── index.rst
│       │   │   │   │   │   │   ├── init-cleanup.rst
│       │   │   │   │   │   │   ├── installing.rst
│       │   │   │   │   │   │   ├── libbson-objects.inv
│       │   │   │   │   │   │   ├── lifecycle.rst
│       │   │   │   │   │   │   ├── logging.rst
│       │   │   │   │   │   │   ├── man/
│       │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   ├── matcher.rst
│       │   │   │   │   │   │   ├── mongoc-common-task-examples.rst
│       │   │   │   │   │   │   ├── mongoc_apm_callbacks_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_apm_callbacks_new.rst
│       │   │   │   │   │   │   ├── mongoc_apm_callbacks_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_command_name.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_duration.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_error.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_operation_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_reply.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_request_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_get_server_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_failed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_command.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_command_name.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_database_name.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_operation_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_request_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_get_server_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_started_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_command_name.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_duration.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_operation_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_reply.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_request_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_get_server_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_command_succeeded_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_get_new_description.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_get_previous_description.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_changed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_closed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_closed_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_closed_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_closed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_failed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_failed_get_duration.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_failed_get_error.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_failed_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_failed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_started_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_started_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_started_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_succeeded_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_succeeded_get_duration.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_succeeded_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_succeeded_get_reply.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_heartbeat_succeeded_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_opening_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_opening_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_opening_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_server_opening_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_command_failed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_command_started_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_command_succeeded_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_changed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_closed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_heartbeat_failed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_heartbeat_started_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_heartbeat_succeeded_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_server_opening_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_topology_changed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_topology_closed_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_set_topology_opening_cb.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_changed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_changed_get_new_description.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_changed_get_previous_description.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_changed_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_changed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_closed_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_closed_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_closed_t.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_opening_get_context.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_opening_get_topology_id.rst
│       │   │   │   │   │   │   ├── mongoc_apm_topology_opening_t.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_bypass_auto_encryption.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_extra.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_keyvault_client.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_keyvault_client_pool.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_keyvault_namespace.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_kms_providers.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_set_schema_map.rst
│       │   │   │   │   │   │   ├── mongoc_auto_encryption_opts_t.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_delete.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_delete_one.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_execute.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_get_hint.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_insert.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_insert_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_remove.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_remove_many_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_remove_one.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_remove_one_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_replace_one.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_replace_one_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_set_bypass_document_validation.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_set_client_session.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_set_hint.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_t.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_update.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_update_many_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_update_one.rst
│       │   │   │   │   │   │   ├── mongoc_bulk_operation_update_one_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_change_stream_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_change_stream_error_document.rst
│       │   │   │   │   │   │   ├── mongoc_change_stream_get_resume_token.rst
│       │   │   │   │   │   │   ├── mongoc_change_stream_next.rst
│       │   │   │   │   │   │   ├── mongoc_change_stream_t.rst
│       │   │   │   │   │   │   ├── mongoc_check_version.rst
│       │   │   │   │   │   │   ├── mongoc_cleanup.rst
│       │   │   │   │   │   │   ├── mongoc_client_command.rst
│       │   │   │   │   │   │   ├── mongoc_client_command_simple.rst
│       │   │   │   │   │   │   ├── mongoc_client_command_simple_with_server_id.rst
│       │   │   │   │   │   │   ├── mongoc_client_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_enable_auto_encryption.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_create_datakey.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_datakey_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_datakey_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_datakey_opts_set_keyaltnames.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_datakey_opts_set_masterkey.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_datakey_opts_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_decrypt.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_set_algorithm.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_set_keyaltname.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_set_keyid.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_encrypt_opts_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_set_keyvault_client.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_set_keyvault_namespace.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_set_kms_providers.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_opts_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_encryption_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_find_databases_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_collection.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_database.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_database_names.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_database_names_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_default_database.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_gridfs.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_max_bson_size.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_max_message_size.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_server_description.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_server_descriptions.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_server_status.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_uri.rst
│       │   │   │   │   │   │   ├── mongoc_client_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_client_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_new_from_uri.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_enable_auto_encryption.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_max_size.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_min_size.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_new.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_pop.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_push.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_set_apm_callbacks.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_set_appname.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_set_error_api.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_set_ssl_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_pool_try_pop.rst
│       │   │   │   │   │   │   ├── mongoc_client_read_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_read_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_reset.rst
│       │   │   │   │   │   │   ├── mongoc_client_select_server.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_abort_transaction.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_advance_cluster_time.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_advance_operation_time.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_append.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_commit_transaction.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_client.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_cluster_time.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_lsid.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_operation_time.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_server_id.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_get_transaction_state.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_in_transaction.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_start_transaction.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_with_transaction.rst
│       │   │   │   │   │   │   ├── mongoc_client_session_with_transaction_cb_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_apm_callbacks.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_appname.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_error_api.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_ssl_opts.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_stream_initiator.rst
│       │   │   │   │   │   │   ├── mongoc_client_set_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_client_start_session.rst
│       │   │   │   │   │   │   ├── mongoc_client_t.rst
│       │   │   │   │   │   │   ├── mongoc_client_watch.rst
│       │   │   │   │   │   │   ├── mongoc_client_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_aggregate.rst
│       │   │   │   │   │   │   ├── mongoc_collection_command.rst
│       │   │   │   │   │   │   ├── mongoc_collection_command_simple.rst
│       │   │   │   │   │   │   ├── mongoc_collection_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_copy.rst
│       │   │   │   │   │   │   ├── mongoc_collection_count.rst
│       │   │   │   │   │   │   ├── mongoc_collection_count_documents.rst
│       │   │   │   │   │   │   ├── mongoc_collection_count_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_create_bulk_operation.rst
│       │   │   │   │   │   │   ├── mongoc_collection_create_bulk_operation_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_create_index.rst
│       │   │   │   │   │   │   ├── mongoc_collection_create_index_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_delete.rst
│       │   │   │   │   │   │   ├── mongoc_collection_delete_many.rst
│       │   │   │   │   │   │   ├── mongoc_collection_delete_one.rst
│       │   │   │   │   │   │   ├── mongoc_collection_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_collection_drop.rst
│       │   │   │   │   │   │   ├── mongoc_collection_drop_index.rst
│       │   │   │   │   │   │   ├── mongoc_collection_drop_index_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_drop_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_ensure_index.rst
│       │   │   │   │   │   │   ├── mongoc_collection_estimated_document_count.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find_and_modify.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find_and_modify_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find_indexes.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find_indexes_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_find_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_get_last_error.rst
│       │   │   │   │   │   │   ├── mongoc_collection_get_name.rst
│       │   │   │   │   │   │   ├── mongoc_collection_get_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_collection_get_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_collection_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_collection_insert.rst
│       │   │   │   │   │   │   ├── mongoc_collection_insert_bulk.rst
│       │   │   │   │   │   │   ├── mongoc_collection_insert_many.rst
│       │   │   │   │   │   │   ├── mongoc_collection_insert_one.rst
│       │   │   │   │   │   │   ├── mongoc_collection_keys_to_index_string.rst
│       │   │   │   │   │   │   ├── mongoc_collection_read_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_read_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_remove.rst
│       │   │   │   │   │   │   ├── mongoc_collection_rename.rst
│       │   │   │   │   │   │   ├── mongoc_collection_rename_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_collection_replace_one.rst
│       │   │   │   │   │   │   ├── mongoc_collection_save.rst
│       │   │   │   │   │   │   ├── mongoc_collection_set_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_collection_set_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_collection_set_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_collection_stats.rst
│       │   │   │   │   │   │   ├── mongoc_collection_t.rst
│       │   │   │   │   │   │   ├── mongoc_collection_update.rst
│       │   │   │   │   │   │   ├── mongoc_collection_update_many.rst
│       │   │   │   │   │   │   ├── mongoc_collection_update_one.rst
│       │   │   │   │   │   │   ├── mongoc_collection_validate.rst
│       │   │   │   │   │   │   ├── mongoc_collection_watch.rst
│       │   │   │   │   │   │   ├── mongoc_collection_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_clone.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_current.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_error.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_error_document.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_batch_size.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_hint.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_host.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_id.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_limit.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_get_max_await_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_is_alive.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_more.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_new_from_command_reply.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_new_from_command_reply_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_next.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_set_batch_size.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_set_hint.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_set_limit.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_set_max_await_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_cursor_t.rst
│       │   │   │   │   │   │   ├── mongoc_database_add_user.rst
│       │   │   │   │   │   │   ├── mongoc_database_aggregate.rst
│       │   │   │   │   │   │   ├── mongoc_database_command.rst
│       │   │   │   │   │   │   ├── mongoc_database_command_simple.rst
│       │   │   │   │   │   │   ├── mongoc_database_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_copy.rst
│       │   │   │   │   │   │   ├── mongoc_database_create_collection.rst
│       │   │   │   │   │   │   ├── mongoc_database_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_database_drop.rst
│       │   │   │   │   │   │   ├── mongoc_database_drop_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_find_collections.rst
│       │   │   │   │   │   │   ├── mongoc_database_find_collections_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_collection.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_collection_names.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_collection_names_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_name.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_database_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_database_has_collection.rst
│       │   │   │   │   │   │   ├── mongoc_database_read_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_read_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_database_remove_all_users.rst
│       │   │   │   │   │   │   ├── mongoc_database_remove_user.rst
│       │   │   │   │   │   │   ├── mongoc_database_set_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_database_set_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_database_set_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_database_t.rst
│       │   │   │   │   │   │   ├── mongoc_database_watch.rst
│       │   │   │   │   │   │   ├── mongoc_database_write_command_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_delete_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_error_has_label.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_append.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_bypass_document_validation.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_fields.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_flags.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_max_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_sort.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_get_update.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_bypass_document_validation.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_fields.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_flags.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_max_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_sort.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_set_update.rst
│       │   │   │   │   │   │   ├── mongoc_find_and_modify_opts_t.rst
│       │   │   │   │   │   │   ├── mongoc_get_major_version.rst
│       │   │   │   │   │   │   ├── mongoc_get_micro_version.rst
│       │   │   │   │   │   │   ├── mongoc_get_minor_version.rst
│       │   │   │   │   │   │   ├── mongoc_get_version.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_abort_upload.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_delete_by_id.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_download_to_stream.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_find.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_new.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_open_download_stream.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_open_upload_stream.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_open_upload_stream_with_id.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_stream_error.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_t.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_upload_from_stream.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_bucket_upload_from_stream_with_id.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_create_file.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_create_file_from_stream.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_drop.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_error.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_aliases.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_chunk_size.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_content_type.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_filename.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_id.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_length.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_md5.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_metadata.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_get_upload_date.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_list_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_list_error.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_list_next.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_list_t.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_opt_t.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_readv.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_remove.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_save.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_seek.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_aliases.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_content_type.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_filename.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_id.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_md5.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_set_metadata.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_t.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_tell.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_file_writev.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_find.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_find_one.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_find_one_by_filename.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_find_one_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_find_with_opts.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_get_chunks.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_get_files.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_remove_by_filename.rst
│       │   │   │   │   │   │   ├── mongoc_gridfs_t.rst
│       │   │   │   │   │   │   ├── mongoc_host_list_t.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_geo_get_default.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_geo_init.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_geo_t.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_get_default.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_init.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_t.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_wt_get_default.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_wt_init.rst
│       │   │   │   │   │   │   ├── mongoc_index_opt_wt_t.rst
│       │   │   │   │   │   │   ├── mongoc_init.rst
│       │   │   │   │   │   │   ├── mongoc_insert_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_iovec_t.rst
│       │   │   │   │   │   │   ├── mongoc_matcher_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_matcher_match.rst
│       │   │   │   │   │   │   ├── mongoc_matcher_new.rst
│       │   │   │   │   │   │   ├── mongoc_matcher_t.rst
│       │   │   │   │   │   │   ├── mongoc_query_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_rand.rst
│       │   │   │   │   │   │   ├── mongoc_rand_add.rst
│       │   │   │   │   │   │   ├── mongoc_rand_seed.rst
│       │   │   │   │   │   │   ├── mongoc_rand_status.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_append.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_copy.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_get_level.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_is_default.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_new.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_set_level.rst
│       │   │   │   │   │   │   ├── mongoc_read_concern_t.rst
│       │   │   │   │   │   │   ├── mongoc_read_mode_t.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_add_tag.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_copy.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_get_max_staleness_seconds.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_get_mode.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_get_tags.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_is_valid.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_new.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_set_max_staleness_seconds.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_set_mode.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_set_tags.rst
│       │   │   │   │   │   │   ├── mongoc_read_prefs_t.rst
│       │   │   │   │   │   │   ├── mongoc_remove_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_reply_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_host.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_id.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_ismaster.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_last_update_time.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_new_copy.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_round_trip_time.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_t.rst
│       │   │   │   │   │   │   ├── mongoc_server_description_type.rst
│       │   │   │   │   │   │   ├── mongoc_server_descriptions_destroy_all.rst
│       │   │   │   │   │   │   ├── mongoc_session_opt_t.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_clone.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_get_causal_consistency.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_get_default_transaction_opts.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_get_transaction_opts.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_set_causal_consistency.rst
│       │   │   │   │   │   │   ├── mongoc_session_opts_set_default_transaction_opts.rst
│       │   │   │   │   │   │   ├── mongoc_socket_accept.rst
│       │   │   │   │   │   │   ├── mongoc_socket_bind.rst
│       │   │   │   │   │   │   ├── mongoc_socket_close.rst
│       │   │   │   │   │   │   ├── mongoc_socket_connect.rst
│       │   │   │   │   │   │   ├── mongoc_socket_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_socket_errno.rst
│       │   │   │   │   │   │   ├── mongoc_socket_getnameinfo.rst
│       │   │   │   │   │   │   ├── mongoc_socket_getsockname.rst
│       │   │   │   │   │   │   ├── mongoc_socket_listen.rst
│       │   │   │   │   │   │   ├── mongoc_socket_new.rst
│       │   │   │   │   │   │   ├── mongoc_socket_recv.rst
│       │   │   │   │   │   │   ├── mongoc_socket_send.rst
│       │   │   │   │   │   │   ├── mongoc_socket_sendv.rst
│       │   │   │   │   │   │   ├── mongoc_socket_setsockopt.rst
│       │   │   │   │   │   │   ├── mongoc_socket_t.rst
│       │   │   │   │   │   │   ├── mongoc_ssl_opt_get_default.rst
│       │   │   │   │   │   │   ├── mongoc_ssl_opt_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_buffered_new.rst
│       │   │   │   │   │   │   ├── mongoc_stream_buffered_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_close.rst
│       │   │   │   │   │   │   ├── mongoc_stream_cork.rst
│       │   │   │   │   │   │   ├── mongoc_stream_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_stream_file_get_fd.rst
│       │   │   │   │   │   │   ├── mongoc_stream_file_new.rst
│       │   │   │   │   │   │   ├── mongoc_stream_file_new_for_path.rst
│       │   │   │   │   │   │   ├── mongoc_stream_file_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_flush.rst
│       │   │   │   │   │   │   ├── mongoc_stream_get_base_stream.rst
│       │   │   │   │   │   │   ├── mongoc_stream_gridfs_new.rst
│       │   │   │   │   │   │   ├── mongoc_stream_read.rst
│       │   │   │   │   │   │   ├── mongoc_stream_readv.rst
│       │   │   │   │   │   │   ├── mongoc_stream_setsockopt.rst
│       │   │   │   │   │   │   ├── mongoc_stream_should_retry.rst
│       │   │   │   │   │   │   ├── mongoc_stream_socket_get_socket.rst
│       │   │   │   │   │   │   ├── mongoc_stream_socket_new.rst
│       │   │   │   │   │   │   ├── mongoc_stream_socket_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_timed_out.rst
│       │   │   │   │   │   │   ├── mongoc_stream_tls_t.rst
│       │   │   │   │   │   │   ├── mongoc_stream_uncork.rst
│       │   │   │   │   │   │   ├── mongoc_stream_write.rst
│       │   │   │   │   │   │   ├── mongoc_stream_writev.rst
│       │   │   │   │   │   │   ├── mongoc_topology_description_get_servers.rst
│       │   │   │   │   │   │   ├── mongoc_topology_description_has_readable_server.rst
│       │   │   │   │   │   │   ├── mongoc_topology_description_has_writable_server.rst
│       │   │   │   │   │   │   ├── mongoc_topology_description_t.rst
│       │   │   │   │   │   │   ├── mongoc_topology_description_type.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opt_t.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_clone.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_get_max_commit_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_get_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_get_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_new.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_set_max_commit_time_ms.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_set_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_set_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_opts_set_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_transaction_state_t.rst
│       │   │   │   │   │   │   ├── mongoc_update_flags_t.rst
│       │   │   │   │   │   │   ├── mongoc_uri_copy.rst
│       │   │   │   │   │   │   ├── mongoc_uri_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_auth_mechanism.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_auth_source.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_compressors.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_database.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_hosts.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_mechanism_properties.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_option_as_bool.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_option_as_int32.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_option_as_int64.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_option_as_utf8.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_options.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_password.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_read_prefs.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_read_prefs_t.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_replica_set.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_service.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_ssl.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_string.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_tls.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_username.rst
│       │   │   │   │   │   │   ├── mongoc_uri_get_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_uri_new.rst
│       │   │   │   │   │   │   ├── mongoc_uri_new_for_host_port.rst
│       │   │   │   │   │   │   ├── mongoc_uri_new_with_error.rst
│       │   │   │   │   │   │   ├── mongoc_uri_option_is_bool.rst
│       │   │   │   │   │   │   ├── mongoc_uri_option_is_int32.rst
│       │   │   │   │   │   │   ├── mongoc_uri_option_is_int64.rst
│       │   │   │   │   │   │   ├── mongoc_uri_option_is_utf8.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_auth_mechanism.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_auth_source.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_compressors.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_database.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_mechanism_properties.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_option_as_bool.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_option_as_int32.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_option_as_int64.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_option_as_utf8.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_password.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_read_concern.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_read_prefs_t.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_username.rst
│       │   │   │   │   │   │   ├── mongoc_uri_set_write_concern.rst
│       │   │   │   │   │   │   ├── mongoc_uri_t.rst
│       │   │   │   │   │   │   ├── mongoc_uri_unescape.rst
│       │   │   │   │   │   │   ├── mongoc_version.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_append.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_copy.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_destroy.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_fsync.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_journal.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_w.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_wmajority.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_wtag.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_wtimeout.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_get_wtimeout_int64.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_is_acknowledged.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_is_default.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_is_valid.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_journal_is_set.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_new.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_fsync.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_journal.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_w.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_wmajority.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_wtag.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_wtimeout.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_set_wtimeout_int64.rst
│       │   │   │   │   │   │   ├── mongoc_write_concern_t.rst
│       │   │   │   │   │   │   ├── static/
│       │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   ├── tutorial.rst
│       │   │   │   │   │   │   ├── using_client_side_encryption.rst
│       │   │   │   │   │   │   └── visual-studio-guide.rst
│       │   │   │   │   │   ├── examples/
│       │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── aggregation/
│       │   │   │   │   │   │   │   └── aggregation1.c
│       │   │   │   │   │   │   ├── basic_aggregation/
│       │   │   │   │   │   │   │   ├── basic-aggregation.c
│       │   │   │   │   │   │   │   ├── constants.c
│       │   │   │   │   │   │   │   ├── distinct.c
│       │   │   │   │   │   │   │   ├── map-reduce-advanced.c
│       │   │   │   │   │   │   │   └── map-reduce-basic.c
│       │   │   │   │   │   │   ├── bulk/
│       │   │   │   │   │   │   │   ├── bulk-collation.c
│       │   │   │   │   │   │   │   ├── bulk1.c
│       │   │   │   │   │   │   │   ├── bulk2.c
│       │   │   │   │   │   │   │   ├── bulk3.c
│       │   │   │   │   │   │   │   ├── bulk4.c
│       │   │   │   │   │   │   │   ├── bulk5.c
│       │   │   │   │   │   │   │   └── bulk6.c
│       │   │   │   │   │   │   ├── client-side-encryption-auto-decryption.c
│       │   │   │   │   │   │   ├── client-side-encryption-explicit.c
│       │   │   │   │   │   │   ├── client-side-encryption-helpers.c
│       │   │   │   │   │   │   ├── client-side-encryption-helpers.h
│       │   │   │   │   │   │   ├── client-side-encryption-schema-map.c
│       │   │   │   │   │   │   ├── client-side-encryption-server-schema.c
│       │   │   │   │   │   │   ├── cmake/
│       │   │   │   │   │   │   │   ├── find_package/
│       │   │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   │   └── find_package_static/
│       │   │   │   │   │   │   │       └── CMakeLists.txt
│       │   │   │   │   │   │   ├── cmake-deprecated/
│       │   │   │   │   │   │   │   ├── find_package/
│       │   │   │   │   │   │   │   │   └── CMakeLists.txt
│       │   │   │   │   │   │   │   └── find_package_static/
│       │   │   │   │   │   │   │       └── CMakeLists.txt
│       │   │   │   │   │   │   ├── common_operations/
│       │   │   │   │   │   │   │   ├── common-operations.c
│       │   │   │   │   │   │   │   └── explain.c
│       │   │   │   │   │   │   ├── compile-with-pkg-config-static.sh
│       │   │   │   │   │   │   ├── compile-with-pkg-config.sh
│       │   │   │   │   │   │   ├── doc-common-insert.c
│       │   │   │   │   │   │   ├── example-client.c
│       │   │   │   │   │   │   ├── example-collection-watch.c
│       │   │   │   │   │   │   ├── example-command-monitoring.c
│       │   │   │   │   │   │   ├── example-command-with-opts.c
│       │   │   │   │   │   │   ├── example-create-indexes.c
│       │   │   │   │   │   │   ├── example-gridfs-bucket.c
│       │   │   │   │   │   │   ├── example-gridfs.c
│       │   │   │   │   │   │   ├── example-pool.c
│       │   │   │   │   │   │   ├── example-resume.c
│       │   │   │   │   │   │   ├── example-scram.c
│       │   │   │   │   │   │   ├── example-sdam-monitoring.c
│       │   │   │   │   │   │   ├── example-session.c
│       │   │   │   │   │   │   ├── example-start-at-optime.c
│       │   │   │   │   │   │   ├── example-transaction.c
│       │   │   │   │   │   │   ├── example-update.c
│       │   │   │   │   │   │   ├── example-with-transaction-cb.c
│       │   │   │   │   │   │   ├── find-and-modify.c
│       │   │   │   │   │   │   ├── find_and_modify_with_opts/
│       │   │   │   │   │   │   │   └── fam.c
│       │   │   │   │   │   │   ├── hello_mongoc.c
│       │   │   │   │   │   │   ├── manual_build_against_deprecated_lib_prefix/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── hello_mongoc.sln
│       │   │   │   │   │   │   │   ├── hello_mongoc.vcxproj
│       │   │   │   │   │   │   │   └── hello_mongoc.vcxproj.filters
│       │   │   │   │   │   │   ├── manual_build_against_deprecated_lib_prefix_static/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── hello_mongoc.sln
│       │   │   │   │   │   │   │   ├── hello_mongoc.vcxproj
│       │   │   │   │   │   │   │   └── hello_mongoc.vcxproj.filters
│       │   │   │   │   │   │   ├── mongoc-dump.c
│       │   │   │   │   │   │   ├── mongoc-ping.c
│       │   │   │   │   │   │   ├── mongoc-tail.c
│       │   │   │   │   │   │   └── parse_handshake_cfg.py
│       │   │   │   │   │   ├── src/
│       │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   ├── libmongoc-1.0.pc.in
│       │   │   │   │   │   │   ├── libmongoc-ssl-1.0.pc.in
│       │   │   │   │   │   │   ├── libmongoc-static-1.0.pc.in
│       │   │   │   │   │   │   ├── mongoc/
│       │   │   │   │   │   │   │   ├── .gitignore
│       │   │   │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   │   │   ├── forwarding/
│       │   │   │   │   │   │   │   │   └── mongoc.h
│       │   │   │   │   │   │   │   ├── mongoc-aggregate-private.h
│       │   │   │   │   │   │   │   ├── mongoc-aggregate.c
│       │   │   │   │   │   │   │   ├── mongoc-apm-private.h
│       │   │   │   │   │   │   │   ├── mongoc-apm.c
│       │   │   │   │   │   │   │   ├── mongoc-apm.h
│       │   │   │   │   │   │   │   ├── mongoc-array-private.h
│       │   │   │   │   │   │   │   ├── mongoc-array.c
│       │   │   │   │   │   │   │   ├── mongoc-async-cmd-private.h
│       │   │   │   │   │   │   │   ├── mongoc-async-cmd.c
│       │   │   │   │   │   │   │   ├── mongoc-async-private.h
│       │   │   │   │   │   │   │   ├── mongoc-async.c
│       │   │   │   │   │   │   │   ├── mongoc-buffer-private.h
│       │   │   │   │   │   │   │   ├── mongoc-buffer.c
│       │   │   │   │   │   │   │   ├── mongoc-bulk-operation-private.h
│       │   │   │   │   │   │   │   ├── mongoc-bulk-operation.c
│       │   │   │   │   │   │   │   ├── mongoc-bulk-operation.h
│       │   │   │   │   │   │   │   ├── mongoc-change-stream-private.h
│       │   │   │   │   │   │   │   ├── mongoc-change-stream.c
│       │   │   │   │   │   │   │   ├── mongoc-change-stream.h
│       │   │   │   │   │   │   │   ├── mongoc-client-pool-private.h
│       │   │   │   │   │   │   │   ├── mongoc-client-pool.c
│       │   │   │   │   │   │   │   ├── mongoc-client-pool.h
│       │   │   │   │   │   │   │   ├── mongoc-client-private.h
│       │   │   │   │   │   │   │   ├── mongoc-client-session-private.h
│       │   │   │   │   │   │   │   ├── mongoc-client-session.c
│       │   │   │   │   │   │   │   ├── mongoc-client-session.h
│       │   │   │   │   │   │   │   ├── mongoc-client-side-encryption-private.h
│       │   │   │   │   │   │   │   ├── mongoc-client-side-encryption.c
│       │   │   │   │   │   │   │   ├── mongoc-client-side-encryption.h
│       │   │   │   │   │   │   │   ├── mongoc-client.c
│       │   │   │   │   │   │   │   ├── mongoc-client.h
│       │   │   │   │   │   │   │   ├── mongoc-cluster-cyrus-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cluster-cyrus.c
│       │   │   │   │   │   │   │   ├── mongoc-cluster-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cluster-sasl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cluster-sasl.c
│       │   │   │   │   │   │   │   ├── mongoc-cluster-sspi-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cluster-sspi.c
│       │   │   │   │   │   │   │   ├── mongoc-cluster.c
│       │   │   │   │   │   │   │   ├── mongoc-cmd-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cmd.c
│       │   │   │   │   │   │   │   ├── mongoc-collection-private.h
│       │   │   │   │   │   │   │   ├── mongoc-collection.c
│       │   │   │   │   │   │   │   ├── mongoc-collection.h
│       │   │   │   │   │   │   │   ├── mongoc-compression-private.h
│       │   │   │   │   │   │   │   ├── mongoc-compression.c
│       │   │   │   │   │   │   │   ├── mongoc-config.h.in
│       │   │   │   │   │   │   │   ├── mongoc-counters-private.h
│       │   │   │   │   │   │   │   ├── mongoc-counters.c
│       │   │   │   │   │   │   │   ├── mongoc-counters.defs
│       │   │   │   │   │   │   │   ├── mongoc-crypt-private.h
│       │   │   │   │   │   │   │   ├── mongoc-crypt.c
│       │   │   │   │   │   │   │   ├── mongoc-crypto-cng-private.h
│       │   │   │   │   │   │   │   ├── mongoc-crypto-cng.c
│       │   │   │   │   │   │   │   ├── mongoc-crypto-common-crypto-private.h
│       │   │   │   │   │   │   │   ├── mongoc-crypto-common-crypto.c
│       │   │   │   │   │   │   │   ├── mongoc-crypto-openssl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-crypto-openssl.c
│       │   │   │   │   │   │   │   ├── mongoc-crypto-private.h
│       │   │   │   │   │   │   │   ├── mongoc-crypto.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-array.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-change-stream.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-cmd-deprecated.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-cmd.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-find-cmd.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-find-opquery.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-find.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-legacy.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cursor.c
│       │   │   │   │   │   │   │   ├── mongoc-cursor.h
│       │   │   │   │   │   │   │   ├── mongoc-cyrus-private.h
│       │   │   │   │   │   │   │   ├── mongoc-cyrus.c
│       │   │   │   │   │   │   │   ├── mongoc-database-private.h
│       │   │   │   │   │   │   │   ├── mongoc-database.c
│       │   │   │   │   │   │   │   ├── mongoc-database.h
│       │   │   │   │   │   │   │   ├── mongoc-errno-private.h
│       │   │   │   │   │   │   │   ├── mongoc-error-private.h
│       │   │   │   │   │   │   │   ├── mongoc-error.c
│       │   │   │   │   │   │   │   ├── mongoc-error.h
│       │   │   │   │   │   │   │   ├── mongoc-find-and-modify-private.h
│       │   │   │   │   │   │   │   ├── mongoc-find-and-modify.c
│       │   │   │   │   │   │   │   ├── mongoc-find-and-modify.h
│       │   │   │   │   │   │   │   ├── mongoc-flags.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-bucket-file-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-bucket-file.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-bucket-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-bucket.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-bucket.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-list-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-list.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-list.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-page-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-page.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-page.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-file.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs-private.h
│       │   │   │   │   │   │   │   ├── mongoc-gridfs.c
│       │   │   │   │   │   │   │   ├── mongoc-gridfs.h
│       │   │   │   │   │   │   │   ├── mongoc-handshake-compiler-private.h
│       │   │   │   │   │   │   │   ├── mongoc-handshake-os-private.h
│       │   │   │   │   │   │   │   ├── mongoc-handshake-private.h
│       │   │   │   │   │   │   │   ├── mongoc-handshake.c
│       │   │   │   │   │   │   │   ├── mongoc-handshake.h
│       │   │   │   │   │   │   │   ├── mongoc-host-list-private.h
│       │   │   │   │   │   │   │   ├── mongoc-host-list.c
│       │   │   │   │   │   │   │   ├── mongoc-host-list.h
│       │   │   │   │   │   │   │   ├── mongoc-index.c
│       │   │   │   │   │   │   │   ├── mongoc-index.h
│       │   │   │   │   │   │   │   ├── mongoc-init.c
│       │   │   │   │   │   │   │   ├── mongoc-init.h
│       │   │   │   │   │   │   │   ├── mongoc-iovec.h
│       │   │   │   │   │   │   │   ├── mongoc-libressl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-libressl.c
│       │   │   │   │   │   │   │   ├── mongoc-linux-distro-scanner-private.h
│       │   │   │   │   │   │   │   ├── mongoc-linux-distro-scanner.c
│       │   │   │   │   │   │   │   ├── mongoc-list-private.h
│       │   │   │   │   │   │   │   ├── mongoc-list.c
│       │   │   │   │   │   │   │   ├── mongoc-log-private.h
│       │   │   │   │   │   │   │   ├── mongoc-log.c
│       │   │   │   │   │   │   │   ├── mongoc-log.h
│       │   │   │   │   │   │   │   ├── mongoc-macros.h
│       │   │   │   │   │   │   │   ├── mongoc-matcher-op-private.h
│       │   │   │   │   │   │   │   ├── mongoc-matcher-op.c
│       │   │   │   │   │   │   │   ├── mongoc-matcher-private.h
│       │   │   │   │   │   │   │   ├── mongoc-matcher.c
│       │   │   │   │   │   │   │   ├── mongoc-matcher.h
│       │   │   │   │   │   │   │   ├── mongoc-memcmp-private.h
│       │   │   │   │   │   │   │   ├── mongoc-memcmp.c
│       │   │   │   │   │   │   │   ├── mongoc-opcode.h
│       │   │   │   │   │   │   │   ├── mongoc-openssl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-openssl.c
│       │   │   │   │   │   │   │   ├── mongoc-opts-helpers-private.h
│       │   │   │   │   │   │   │   ├── mongoc-opts-helpers.c
│       │   │   │   │   │   │   │   ├── mongoc-opts-private.h
│       │   │   │   │   │   │   │   ├── mongoc-opts.c
│       │   │   │   │   │   │   │   ├── mongoc-prelude.h
│       │   │   │   │   │   │   │   ├── mongoc-queue-private.h
│       │   │   │   │   │   │   │   ├── mongoc-queue.c
│       │   │   │   │   │   │   │   ├── mongoc-rand-cng.c
│       │   │   │   │   │   │   │   ├── mongoc-rand-common-crypto.c
│       │   │   │   │   │   │   │   ├── mongoc-rand-openssl.c
│       │   │   │   │   │   │   │   ├── mongoc-rand-private.h
│       │   │   │   │   │   │   │   ├── mongoc-rand.h
│       │   │   │   │   │   │   │   ├── mongoc-read-concern-private.h
│       │   │   │   │   │   │   │   ├── mongoc-read-concern.c
│       │   │   │   │   │   │   │   ├── mongoc-read-concern.h
│       │   │   │   │   │   │   │   ├── mongoc-read-prefs-private.h
│       │   │   │   │   │   │   │   ├── mongoc-read-prefs.c
│       │   │   │   │   │   │   │   ├── mongoc-read-prefs.h
│       │   │   │   │   │   │   │   ├── mongoc-rpc-private.h
│       │   │   │   │   │   │   │   ├── mongoc-rpc.c
│       │   │   │   │   │   │   │   ├── mongoc-sasl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-sasl.c
│       │   │   │   │   │   │   │   ├── mongoc-scram-private.h
│       │   │   │   │   │   │   │   ├── mongoc-scram.c
│       │   │   │   │   │   │   │   ├── mongoc-secure-channel-private.h
│       │   │   │   │   │   │   │   ├── mongoc-secure-channel.c
│       │   │   │   │   │   │   │   ├── mongoc-secure-transport-private.h
│       │   │   │   │   │   │   │   ├── mongoc-secure-transport.c
│       │   │   │   │   │   │   │   ├── mongoc-server-description-private.h
│       │   │   │   │   │   │   │   ├── mongoc-server-description.c
│       │   │   │   │   │   │   │   ├── mongoc-server-description.h
│       │   │   │   │   │   │   │   ├── mongoc-server-stream-private.h
│       │   │   │   │   │   │   │   ├── mongoc-server-stream.c
│       │   │   │   │   │   │   │   ├── mongoc-set-private.h
│       │   │   │   │   │   │   │   ├── mongoc-set.c
│       │   │   │   │   │   │   │   ├── mongoc-socket-private.h
│       │   │   │   │   │   │   │   ├── mongoc-socket.c
│       │   │   │   │   │   │   │   ├── mongoc-socket.h
│       │   │   │   │   │   │   │   ├── mongoc-ssl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-ssl.c
│       │   │   │   │   │   │   │   ├── mongoc-ssl.h
│       │   │   │   │   │   │   │   ├── mongoc-sspi-private.h
│       │   │   │   │   │   │   │   ├── mongoc-sspi.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-buffered.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-buffered.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-file.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-file.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs-download-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs-download.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs-upload-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs-upload.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-gridfs.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-socket.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-socket.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-libressl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-libressl.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-libressl.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-openssl-bio-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-openssl-bio.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-openssl-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-openssl.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-openssl.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-channel-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-channel.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-channel.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-transport-private.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-transport.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls-secure-transport.h
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls.c
│       │   │   │   │   │   │   │   ├── mongoc-stream-tls.h
│       │   │   │   │   │   │   │   ├── mongoc-stream.c
│       │   │   │   │   │   │   │   ├── mongoc-stream.h
│       │   │   │   │   │   │   │   ├── mongoc-thread-private.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-description-apm-private.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-description-apm.c
│       │   │   │   │   │   │   │   ├── mongoc-topology-description-private.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-description.c
│       │   │   │   │   │   │   │   ├── mongoc-topology-description.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-private.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-scanner-private.h
│       │   │   │   │   │   │   │   ├── mongoc-topology-scanner.c
│       │   │   │   │   │   │   │   ├── mongoc-topology.c
│       │   │   │   │   │   │   │   ├── mongoc-trace-private.h
│       │   │   │   │   │   │   │   ├── mongoc-uri-private.h
│       │   │   │   │   │   │   │   ├── mongoc-uri.c
│       │   │   │   │   │   │   │   ├── mongoc-uri.h
│       │   │   │   │   │   │   │   ├── mongoc-util-private.h
│       │   │   │   │   │   │   │   ├── mongoc-util.c
│       │   │   │   │   │   │   │   ├── mongoc-version-functions.c
│       │   │   │   │   │   │   │   ├── mongoc-version-functions.h
│       │   │   │   │   │   │   │   ├── mongoc-version.h.in
│       │   │   │   │   │   │   │   ├── mongoc-write-command-legacy-private.h
│       │   │   │   │   │   │   │   ├── mongoc-write-command-legacy.c
│       │   │   │   │   │   │   │   ├── mongoc-write-command-private.h
│       │   │   │   │   │   │   │   ├── mongoc-write-command.c
│       │   │   │   │   │   │   │   ├── mongoc-write-concern-private.h
│       │   │   │   │   │   │   │   ├── mongoc-write-concern.c
│       │   │   │   │   │   │   │   ├── mongoc-write-concern.h
│       │   │   │   │   │   │   │   ├── mongoc.h
│       │   │   │   │   │   │   │   ├── op-compressed.def
│       │   │   │   │   │   │   │   ├── op-delete.def
│       │   │   │   │   │   │   │   ├── op-get-more.def
│       │   │   │   │   │   │   │   ├── op-header.def
│       │   │   │   │   │   │   │   ├── op-insert.def
│       │   │   │   │   │   │   │   ├── op-kill-cursors.def
│       │   │   │   │   │   │   │   ├── op-msg.def
│       │   │   │   │   │   │   │   ├── op-query.def
│       │   │   │   │   │   │   │   ├── op-reply-header.def
│       │   │   │   │   │   │   │   ├── op-reply.def
│       │   │   │   │   │   │   │   ├── op-update.def
│       │   │   │   │   │   │   │   └── utlist.h
│       │   │   │   │   │   │   └── mongoc-config.cmake
│       │   │   │   │   │   └── tests/
│       │   │   │   │   │       ├── .gitignore
│       │   │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │   │       ├── TestSuite.c
│       │   │   │   │   │       ├── TestSuite.h
│       │   │   │   │   │       ├── client_side_encryption_prose/
│       │   │   │   │   │       │   ├── corpus/
│       │   │   │   │   │       │   │   ├── corpus-encrypted.json
│       │   │   │   │   │       │   │   ├── corpus-key-aws.json
│       │   │   │   │   │       │   │   ├── corpus-key-local.json
│       │   │   │   │   │       │   │   ├── corpus-schema.json
│       │   │   │   │   │       │   │   └── corpus.json
│       │   │   │   │   │       │   ├── datakey-and-double-encryption-schemamap.json
│       │   │   │   │   │       │   ├── external/
│       │   │   │   │   │       │   │   ├── external-key.json
│       │   │   │   │   │       │   │   └── external-schema.json
│       │   │   │   │   │       │   ├── limits-doc.json
│       │   │   │   │   │       │   ├── limits-key.json
│       │   │   │   │   │       │   ├── limits-schema.json
│       │   │   │   │   │       │   └── schema.json
│       │   │   │   │   │       ├── debug-stream.c
│       │   │   │   │   │       ├── json/
│       │   │   │   │   │       │   ├── auth/
│       │   │   │   │   │       │   │   └── connection-string.json
│       │   │   │   │   │       │   ├── change_streams/
│       │   │   │   │   │       │   │   ├── change-streams-errors.json
│       │   │   │   │   │       │   │   └── change-streams.json
│       │   │   │   │   │       │   ├── client_side_encryption/
│       │   │   │   │   │       │   │   ├── aggregate.json
│       │   │   │   │   │       │   │   ├── badSchema.json
│       │   │   │   │   │       │   │   ├── basic.json
│       │   │   │   │   │       │   │   ├── bulk.json
│       │   │   │   │   │       │   │   ├── bypassAutoEncryption.json
│       │   │   │   │   │       │   │   ├── bypassedCommand.json
│       │   │   │   │   │       │   │   ├── count.json
│       │   │   │   │   │       │   │   ├── countDocuments.json
│       │   │   │   │   │       │   │   ├── delete.json
│       │   │   │   │   │       │   │   ├── distinct.json
│       │   │   │   │   │       │   │   ├── explain.json
│       │   │   │   │   │       │   │   ├── find.json
│       │   │   │   │   │       │   │   ├── findOneAndDelete.json
│       │   │   │   │   │       │   │   ├── findOneAndReplace.json
│       │   │   │   │   │       │   │   ├── findOneAndUpdate.json
│       │   │   │   │   │       │   │   ├── getMore.json
│       │   │   │   │   │       │   │   ├── insert.json
│       │   │   │   │   │       │   │   ├── keyAltName.json
│       │   │   │   │   │       │   │   ├── localKMS.json
│       │   │   │   │   │       │   │   ├── localSchema.json
│       │   │   │   │   │       │   │   ├── malformedCiphertext.json
│       │   │   │   │   │       │   │   ├── maxWireVersion.json
│       │   │   │   │   │       │   │   ├── missingKey.json
│       │   │   │   │   │       │   │   ├── replaceOne.json
│       │   │   │   │   │       │   │   ├── types.json
│       │   │   │   │   │       │   │   ├── updateMany.json
│       │   │   │   │   │       │   │   └── updateOne.json
│       │   │   │   │   │       │   ├── command_monitoring/
│       │   │   │   │   │       │   │   ├── bulkWrite.json
│       │   │   │   │   │       │   │   ├── command.json
│       │   │   │   │   │       │   │   ├── deleteMany.json
│       │   │   │   │   │       │   │   ├── deleteOne.json
│       │   │   │   │   │       │   │   ├── find.json
│       │   │   │   │   │       │   │   ├── insertMany.json
│       │   │   │   │   │       │   │   ├── insertOne.json
│       │   │   │   │   │       │   │   ├── unacknowledgedBulkWrite.json
│       │   │   │   │   │       │   │   ├── updateMany.json
│       │   │   │   │   │       │   │   └── updateOne.json
│       │   │   │   │   │       │   ├── connection_uri/
│       │   │   │   │   │       │   │   ├── README.rst
│       │   │   │   │   │       │   │   ├── additional-nonspec-tests.json
│       │   │   │   │   │       │   │   ├── invalid-uris.json
│       │   │   │   │   │       │   │   ├── valid-auth.json
│       │   │   │   │   │       │   │   ├── valid-db-with-dotted-name.json
│       │   │   │   │   │       │   │   ├── valid-host_identifiers.json
│       │   │   │   │   │       │   │   ├── valid-options.json
│       │   │   │   │   │       │   │   ├── valid-unix_socket-absolute.json
│       │   │   │   │   │       │   │   ├── valid-unix_socket-relative.json
│       │   │   │   │   │       │   │   └── valid-warnings.json
│       │   │   │   │   │       │   ├── crud/
│       │   │   │   │   │       │   │   ├── v1/
│       │   │   │   │   │       │   │   │   ├── read/
│       │   │   │   │   │       │   │   │   │   ├── aggregate-collation.json
│       │   │   │   │   │       │   │   │   │   ├── aggregate-out.json
│       │   │   │   │   │       │   │   │   │   ├── aggregate.json
│       │   │   │   │   │       │   │   │   │   ├── count-collation.json
│       │   │   │   │   │       │   │   │   │   ├── count-empty.json
│       │   │   │   │   │       │   │   │   │   ├── count.json
│       │   │   │   │   │       │   │   │   │   ├── distinct-collation.json
│       │   │   │   │   │       │   │   │   │   ├── distinct.json
│       │   │   │   │   │       │   │   │   │   ├── find-collation.json
│       │   │   │   │   │       │   │   │   │   └── find.json
│       │   │   │   │   │       │   │   │   └── write/
│       │   │   │   │   │       │   │   │       ├── bulkWrite-arrayFilters.json
│       │   │   │   │   │       │   │   │       ├── bulkWrite-collation.json
│       │   │   │   │   │       │   │   │       ├── bulkWrite.json
│       │   │   │   │   │       │   │   │       ├── deleteMany-collation.json
│       │   │   │   │   │       │   │   │       ├── deleteMany.json
│       │   │   │   │   │       │   │   │       ├── deleteOne-collation.json
│       │   │   │   │   │       │   │   │       ├── deleteOne.json
│       │   │   │   │   │       │   │   │       ├── findOneAndDelete-collation.json
│       │   │   │   │   │       │   │   │       ├── findOneAndDelete.json
│       │   │   │   │   │       │   │   │       ├── findOneAndReplace-collation.json
│       │   │   │   │   │       │   │   │       ├── findOneAndReplace-upsert.json
│       │   │   │   │   │       │   │   │       ├── findOneAndReplace.json
│       │   │   │   │   │       │   │   │       ├── findOneAndUpdate-arrayFilters.json
│       │   │   │   │   │       │   │   │       ├── findOneAndUpdate-collation.json
│       │   │   │   │   │       │   │   │       ├── findOneAndUpdate.json
│       │   │   │   │   │       │   │   │       ├── insertMany.json
│       │   │   │   │   │       │   │   │       ├── insertOne.json
│       │   │   │   │   │       │   │   │       ├── replaceOne-collation.json
│       │   │   │   │   │       │   │   │       ├── replaceOne.json
│       │   │   │   │   │       │   │   │       ├── updateMany-arrayFilters.json
│       │   │   │   │   │       │   │   │       ├── updateMany-collation.json
│       │   │   │   │   │       │   │   │       ├── updateMany.json
│       │   │   │   │   │       │   │   │       ├── updateOne-arrayFilters.json
│       │   │   │   │   │       │   │   │       ├── updateOne-collation.json
│       │   │   │   │   │       │   │   │       └── updateOne.json
│       │   │   │   │   │       │   │   └── v2/
│       │   │   │   │   │       │   │       ├── aggregate-merge.json
│       │   │   │   │   │       │   │       ├── aggregate-out-readConcern.json
│       │   │   │   │   │       │   │       ├── bulkWrite-arrayFilters.json
│       │   │   │   │   │       │   │       ├── bulkWrite-update-hint.json
│       │   │   │   │   │       │   │       ├── db-aggregate.json
│       │   │   │   │   │       │   │       ├── replaceOne-hint.json
│       │   │   │   │   │       │   │       ├── updateMany-hint.json
│       │   │   │   │   │       │   │       ├── updateOne-hint.json
│       │   │   │   │   │       │   │       └── updateWithPipelines.json
│       │   │   │   │   │       │   ├── gridfs/
│       │   │   │   │   │       │   │   ├── delete.json
│       │   │   │   │   │       │   │   ├── download.json
│       │   │   │   │   │       │   │   ├── download_by_name.json
│       │   │   │   │   │       │   │   └── upload.json
│       │   │   │   │   │       │   ├── initial_dns_auth/
│       │   │   │   │   │       │   │   ├── README
│       │   │   │   │   │       │   │   └── dns-auth.json
│       │   │   │   │   │       │   ├── initial_dns_seedlist_discovery/
│       │   │   │   │   │       │   │   ├── longer-parent-in-return.json
│       │   │   │   │   │       │   │   ├── misformatted-option.json
│       │   │   │   │   │       │   │   ├── no-results.json
│       │   │   │   │   │       │   │   ├── not-enough-parts.json
│       │   │   │   │   │       │   │   ├── one-result-default-port.json
│       │   │   │   │   │       │   │   ├── one-txt-record-multiple-strings.json
│       │   │   │   │   │       │   │   ├── one-txt-record.json
│       │   │   │   │   │       │   │   ├── parent-part-mismatch1.json
│       │   │   │   │   │       │   │   ├── parent-part-mismatch2.json
│       │   │   │   │   │       │   │   ├── parent-part-mismatch3.json
│       │   │   │   │   │       │   │   ├── parent-part-mismatch4.json
│       │   │   │   │   │       │   │   ├── parent-part-mismatch5.json
│       │   │   │   │   │       │   │   ├── returned-parent-too-short.json
│       │   │   │   │   │       │   │   ├── returned-parent-wrong.json
│       │   │   │   │   │       │   │   ├── two-results-default-port.json
│       │   │   │   │   │       │   │   ├── two-results-nonstandard-port.json
│       │   │   │   │   │       │   │   ├── two-txt-records.json
│       │   │   │   │   │       │   │   ├── txt-record-not-allowed-option.json
│       │   │   │   │   │       │   │   ├── txt-record-with-overridden-ssl-option.json
│       │   │   │   │   │       │   │   ├── txt-record-with-overridden-uri-option.json
│       │   │   │   │   │       │   │   ├── txt-record-with-unallowed-option.json
│       │   │   │   │   │       │   │   ├── uri-with-admin-database.json
│       │   │   │   │   │       │   │   ├── uri-with-port.json
│       │   │   │   │   │       │   │   └── uri-with-two-hosts.json
│       │   │   │   │   │       │   ├── max_staleness/
│       │   │   │   │   │       │   │   ├── ReplicaSetNoPrimary/
│       │   │   │   │   │       │   │   │   ├── DefaultNoMaxStaleness.json
│       │   │   │   │   │       │   │   │   ├── Incompatible.json
│       │   │   │   │   │       │   │   │   ├── LastUpdateTime.json
│       │   │   │   │   │       │   │   │   ├── Nearest.json
│       │   │   │   │   │       │   │   │   ├── Nearest2.json
│       │   │   │   │   │       │   │   │   ├── NoKnownServers.json
│       │   │   │   │   │       │   │   │   ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │   │   ├── PrimaryPreferred_tags.json
│       │   │   │   │   │       │   │   │   ├── Secondary.json
│       │   │   │   │   │       │   │   │   ├── SecondaryPreferred.json
│       │   │   │   │   │       │   │   │   ├── SecondaryPreferred_tags.json
│       │   │   │   │   │       │   │   │   └── ZeroMaxStaleness.json
│       │   │   │   │   │       │   │   ├── ReplicaSetWithPrimary/
│       │   │   │   │   │       │   │   │   ├── DefaultNoMaxStaleness.json
│       │   │   │   │   │       │   │   │   ├── Incompatible.json
│       │   │   │   │   │       │   │   │   ├── LastUpdateTime.json
│       │   │   │   │   │       │   │   │   ├── LongHeartbeat.json
│       │   │   │   │   │       │   │   │   ├── LongHeartbeat2.json
│       │   │   │   │   │       │   │   │   ├── MaxStalenessTooSmall.json
│       │   │   │   │   │       │   │   │   ├── MaxStalenessWithModePrimary.json
│       │   │   │   │   │       │   │   │   ├── Nearest.json
│       │   │   │   │   │       │   │   │   ├── Nearest2.json
│       │   │   │   │   │       │   │   │   ├── Nearest_tags.json
│       │   │   │   │   │       │   │   │   ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │   │   ├── PrimaryPreferred_incompatible.json
│       │   │   │   │   │       │   │   │   ├── SecondaryPreferred.json
│       │   │   │   │   │       │   │   │   ├── SecondaryPreferred_tags.json
│       │   │   │   │   │       │   │   │   ├── SecondaryPreferred_tags2.json
│       │   │   │   │   │       │   │   │   ├── Secondary_tags.json
│       │   │   │   │   │       │   │   │   ├── Secondary_tags2.json
│       │   │   │   │   │       │   │   │   └── ZeroMaxStaleness.json
│       │   │   │   │   │       │   │   ├── Sharded/
│       │   │   │   │   │       │   │   │   ├── Incompatible.json
│       │   │   │   │   │       │   │   │   └── SmallMaxStaleness.json
│       │   │   │   │   │       │   │   ├── Single/
│       │   │   │   │   │       │   │   │   ├── Incompatible.json
│       │   │   │   │   │       │   │   │   └── SmallMaxStaleness.json
│       │   │   │   │   │       │   │   ├── Unknown/
│       │   │   │   │   │       │   │   │   └── SmallMaxStaleness.json
│       │   │   │   │   │       │   │   └── supplemental/
│       │   │   │   │   │       │   │       └── MissingLastWriteDate.json
│       │   │   │   │   │       │   ├── read_write_concern/
│       │   │   │   │   │       │   │   ├── connection-string/
│       │   │   │   │   │       │   │   │   ├── read-concern.json
│       │   │   │   │   │       │   │   │   └── write-concern.json
│       │   │   │   │   │       │   │   └── document/
│       │   │   │   │   │       │   │       ├── read-concern.json
│       │   │   │   │   │       │   │       └── write-concern.json
│       │   │   │   │   │       │   ├── retryable_reads/
│       │   │   │   │   │       │   │   ├── README.rst
│       │   │   │   │   │       │   │   ├── aggregate-merge.json
│       │   │   │   │   │       │   │   ├── aggregate-serverErrors.json
│       │   │   │   │   │       │   │   ├── aggregate.json
│       │   │   │   │   │       │   │   ├── changeStreams-client.watch-serverErrors.json
│       │   │   │   │   │       │   │   ├── changeStreams-client.watch.json
│       │   │   │   │   │       │   │   ├── changeStreams-db.coll.watch-serverErrors.json
│       │   │   │   │   │       │   │   ├── changeStreams-db.coll.watch.json
│       │   │   │   │   │       │   │   ├── changeStreams-db.watch-serverErrors.json
│       │   │   │   │   │       │   │   ├── changeStreams-db.watch.json
│       │   │   │   │   │       │   │   ├── count-serverErrors.json
│       │   │   │   │   │       │   │   ├── count.json
│       │   │   │   │   │       │   │   ├── countDocuments-serverErrors.json
│       │   │   │   │   │       │   │   ├── countDocuments.json
│       │   │   │   │   │       │   │   ├── distinct-serverErrors.json
│       │   │   │   │   │       │   │   ├── distinct.json
│       │   │   │   │   │       │   │   ├── estimatedDocumentCount-serverErrors.json
│       │   │   │   │   │       │   │   ├── estimatedDocumentCount.json
│       │   │   │   │   │       │   │   ├── find-serverErrors.json
│       │   │   │   │   │       │   │   ├── find.json
│       │   │   │   │   │       │   │   ├── findOne-serverErrors.json
│       │   │   │   │   │       │   │   ├── findOne.json
│       │   │   │   │   │       │   │   ├── gridfs-download-serverErrors.json
│       │   │   │   │   │       │   │   ├── gridfs-download.json
│       │   │   │   │   │       │   │   ├── gridfs-downloadByName-serverErrors.json
│       │   │   │   │   │       │   │   ├── gridfs-downloadByName.json
│       │   │   │   │   │       │   │   ├── listCollectionNames-serverErrors.json
│       │   │   │   │   │       │   │   ├── listCollectionNames.json
│       │   │   │   │   │       │   │   ├── listCollectionObjects-serverErrors.json
│       │   │   │   │   │       │   │   ├── listCollectionObjects.json
│       │   │   │   │   │       │   │   ├── listCollections-serverErrors.json
│       │   │   │   │   │       │   │   ├── listCollections.json
│       │   │   │   │   │       │   │   ├── listDatabaseNames-serverErrors.json
│       │   │   │   │   │       │   │   ├── listDatabaseNames.json
│       │   │   │   │   │       │   │   ├── listDatabaseObjects-serverErrors.json
│       │   │   │   │   │       │   │   ├── listDatabaseObjects.json
│       │   │   │   │   │       │   │   ├── listDatabases-serverErrors.json
│       │   │   │   │   │       │   │   ├── listDatabases.json
│       │   │   │   │   │       │   │   ├── listIndexNames-serverErrors.json
│       │   │   │   │   │       │   │   ├── listIndexNames.json
│       │   │   │   │   │       │   │   ├── listIndexes-serverErrors.json
│       │   │   │   │   │       │   │   ├── listIndexes.json
│       │   │   │   │   │       │   │   └── mapReduce.json
│       │   │   │   │   │       │   ├── retryable_writes/
│       │   │   │   │   │       │   │   ├── bulkWrite-serverErrors.json
│       │   │   │   │   │       │   │   ├── bulkWrite.json
│       │   │   │   │   │       │   │   ├── deleteMany.json
│       │   │   │   │   │       │   │   ├── deleteOne-serverErrors.json
│       │   │   │   │   │       │   │   ├── deleteOne.json
│       │   │   │   │   │       │   │   ├── findOneAndDelete-serverErrors.json
│       │   │   │   │   │       │   │   ├── findOneAndDelete.json
│       │   │   │   │   │       │   │   ├── findOneAndReplace-serverErrors.json
│       │   │   │   │   │       │   │   ├── findOneAndReplace.json
│       │   │   │   │   │       │   │   ├── findOneAndUpdate-serverErrors.json
│       │   │   │   │   │       │   │   ├── findOneAndUpdate.json
│       │   │   │   │   │       │   │   ├── insertMany-serverErrors.json
│       │   │   │   │   │       │   │   ├── insertMany.json
│       │   │   │   │   │       │   │   ├── insertOne-serverErrors.json
│       │   │   │   │   │       │   │   ├── insertOne.json
│       │   │   │   │   │       │   │   ├── replaceOne-serverErrors.json
│       │   │   │   │   │       │   │   ├── replaceOne.json
│       │   │   │   │   │       │   │   ├── retryableErrors.json
│       │   │   │   │   │       │   │   ├── updateMany.json
│       │   │   │   │   │       │   │   ├── updateOne-serverErrors.json
│       │   │   │   │   │       │   │   └── updateOne.json
│       │   │   │   │   │       │   ├── server_discovery_and_monitoring/
│       │   │   │   │   │       │   │   ├── monitoring/
│       │   │   │   │   │       │   │   │   ├── replica_set_with_no_primary.json
│       │   │   │   │   │       │   │   │   ├── replica_set_with_primary.json
│       │   │   │   │   │       │   │   │   ├── replica_set_with_removal.json
│       │   │   │   │   │       │   │   │   ├── required_replica_set.json
│       │   │   │   │   │       │   │   │   └── standalone.json
│       │   │   │   │   │       │   │   ├── rs/
│       │   │   │   │   │       │   │   │   ├── compatible.json
│       │   │   │   │   │       │   │   │   ├── compatible_unknown.json
│       │   │   │   │   │       │   │   │   ├── discover_arbiters.json
│       │   │   │   │   │       │   │   │   ├── discover_passives.json
│       │   │   │   │   │       │   │   │   ├── discover_primary.json
│       │   │   │   │   │       │   │   │   ├── discover_secondary.json
│       │   │   │   │   │       │   │   │   ├── discovery.json
│       │   │   │   │   │       │   │   │   ├── equal_electionids.json
│       │   │   │   │   │       │   │   │   ├── ghost_discovered.json
│       │   │   │   │   │       │   │   │   ├── hosts_differ_from_seeds.json
│       │   │   │   │   │       │   │   │   ├── incompatible_arbiter.json
│       │   │   │   │   │       │   │   │   ├── incompatible_ghost.json
│       │   │   │   │   │       │   │   │   ├── incompatible_other.json
│       │   │   │   │   │       │   │   │   ├── ls_timeout.json
│       │   │   │   │   │       │   │   │   ├── member_reconfig.json
│       │   │   │   │   │       │   │   │   ├── member_standalone.json
│       │   │   │   │   │       │   │   │   ├── new_primary.json
│       │   │   │   │   │       │   │   │   ├── new_primary_new_electionid.json
│       │   │   │   │   │       │   │   │   ├── new_primary_new_setversion.json
│       │   │   │   │   │       │   │   │   ├── new_primary_wrong_set_name.json
│       │   │   │   │   │       │   │   │   ├── non_rs_member.json
│       │   │   │   │   │       │   │   │   ├── normalize_case.json
│       │   │   │   │   │       │   │   │   ├── normalize_case_me.json
│       │   │   │   │   │       │   │   │   ├── null_election_id.json
│       │   │   │   │   │       │   │   │   ├── primary_becomes_ghost.json
│       │   │   │   │   │       │   │   │   ├── primary_becomes_mongos.json
│       │   │   │   │   │       │   │   │   ├── primary_becomes_standalone.json
│       │   │   │   │   │       │   │   │   ├── primary_changes_set_name.json
│       │   │   │   │   │       │   │   │   ├── primary_disconnect.json
│       │   │   │   │   │       │   │   │   ├── primary_disconnect_electionid.json
│       │   │   │   │   │       │   │   │   ├── primary_disconnect_setversion.json
│       │   │   │   │   │       │   │   │   ├── primary_hint_from_secondary_with_mismatched_me.json
│       │   │   │   │   │       │   │   │   ├── primary_mismatched_me.json
│       │   │   │   │   │       │   │   │   ├── primary_reports_new_member.json
│       │   │   │   │   │       │   │   │   ├── primary_to_no_primary_mismatched_me.json
│       │   │   │   │   │       │   │   │   ├── primary_wrong_set_name.json
│       │   │   │   │   │       │   │   │   ├── response_from_removed.json
│       │   │   │   │   │       │   │   │   ├── rsother_discovered.json
│       │   │   │   │   │       │   │   │   ├── sec_not_auth.json
│       │   │   │   │   │       │   │   │   ├── secondary_ignore_ok_0.json
│       │   │   │   │   │       │   │   │   ├── secondary_mismatched_me.json
│       │   │   │   │   │       │   │   │   ├── secondary_wrong_set_name.json
│       │   │   │   │   │       │   │   │   ├── secondary_wrong_set_name_with_primary.json
│       │   │   │   │   │       │   │   │   ├── setversion_without_electionid.json
│       │   │   │   │   │       │   │   │   ├── stepdown_change_set_name.json
│       │   │   │   │   │       │   │   │   ├── too_new.json
│       │   │   │   │   │       │   │   │   ├── too_old.json
│       │   │   │   │   │       │   │   │   ├── unexpected_mongos.json
│       │   │   │   │   │       │   │   │   ├── use_setversion_without_electionid.json
│       │   │   │   │   │       │   │   │   └── wrong_set_name.json
│       │   │   │   │   │       │   │   ├── sharded/
│       │   │   │   │   │       │   │   │   ├── compatible.json
│       │   │   │   │   │       │   │   │   ├── ls_timeout_mongos.json
│       │   │   │   │   │       │   │   │   ├── mongos_disconnect.json
│       │   │   │   │   │       │   │   │   ├── multiple_mongoses.json
│       │   │   │   │   │       │   │   │   ├── non_mongos_removed.json
│       │   │   │   │   │       │   │   │   ├── normalize_uri_case.json
│       │   │   │   │   │       │   │   │   ├── too_new.json
│       │   │   │   │   │       │   │   │   └── too_old.json
│       │   │   │   │   │       │   │   ├── single/
│       │   │   │   │   │       │   │   │   ├── compatible.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_external_ip.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_mongos.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_rsarbiter.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_rsprimary.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_rssecondary.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_slave.json
│       │   │   │   │   │       │   │   │   ├── direct_connection_standalone.json
│       │   │   │   │   │       │   │   │   ├── ls_timeout_standalone.json
│       │   │   │   │   │       │   │   │   ├── not_ok_response.json
│       │   │   │   │   │       │   │   │   ├── standalone_removed.json
│       │   │   │   │   │       │   │   │   ├── too_new.json
│       │   │   │   │   │       │   │   │   ├── too_old.json
│       │   │   │   │   │       │   │   │   └── unavailable_seed.json
│       │   │   │   │   │       │   │   └── supplemental/
│       │   │   │   │   │       │   │       ├── discover_rs_name.json
│       │   │   │   │   │       │   │       ├── discover_rs_name_from_primary.json
│       │   │   │   │   │       │   │       └── discover_rs_name_from_secondary.json
│       │   │   │   │   │       │   ├── server_selection/
│       │   │   │   │   │       │   │   ├── rtt/
│       │   │   │   │   │       │   │   │   ├── first_value.json
│       │   │   │   │   │       │   │   │   ├── first_value_zero.json
│       │   │   │   │   │       │   │   │   ├── value_test_1.json
│       │   │   │   │   │       │   │   │   ├── value_test_2.json
│       │   │   │   │   │       │   │   │   ├── value_test_3.json
│       │   │   │   │   │       │   │   │   ├── value_test_4.json
│       │   │   │   │   │       │   │   │   └── value_test_5.json
│       │   │   │   │   │       │   │   └── server_selection/
│       │   │   │   │   │       │   │       ├── ReplicaSetNoPrimary/
│       │   │   │   │   │       │   │       │   ├── read/
│       │   │   │   │   │       │   │       │   │   ├── Nearest.json
│       │   │   │   │   │       │   │       │   │   ├── Nearest_multiple.json
│       │   │   │   │   │       │   │       │   │   ├── Nearest_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── PossiblePrimary.json
│       │   │   │   │   │       │   │       │   │   ├── PossiblePrimaryNearest.json
│       │   │   │   │   │       │   │       │   │   ├── Primary.json
│       │   │   │   │   │       │   │       │   │   ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │       │   │   ├── PrimaryPreferred_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── Secondary.json
│       │   │   │   │   │       │   │       │   │   ├── SecondaryPreferred.json
│       │   │   │   │   │       │   │       │   │   ├── SecondaryPreferred_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── Secondary_multi_tags.json
│       │   │   │   │   │       │   │       │   │   ├── Secondary_multi_tags2.json
│       │   │   │   │   │       │   │       │   │   └── Secondary_non_matching.json
│       │   │   │   │   │       │   │       │   └── write/
│       │   │   │   │   │       │   │       │       └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       ├── ReplicaSetWithPrimary/
│       │   │   │   │   │       │   │       │   ├── read/
│       │   │   │   │   │       │   │       │   │   ├── Nearest.json
│       │   │   │   │   │       │   │       │   │   ├── Nearest_multiple.json
│       │   │   │   │   │       │   │       │   │   ├── Nearest_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── Primary.json
│       │   │   │   │   │       │   │       │   │   ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │       │   │   ├── PrimaryPreferred_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── Secondary.json
│       │   │   │   │   │       │   │       │   │   ├── SecondaryPreferred.json
│       │   │   │   │   │       │   │       │   │   ├── SecondaryPreferred_non_matching.json
│       │   │   │   │   │       │   │       │   │   ├── SecondaryPreferred_tags.json
│       │   │   │   │   │       │   │       │   │   └── Secondary_non_matching.json
│       │   │   │   │   │       │   │       │   └── write/
│       │   │   │   │   │       │   │       │       └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       ├── Sharded/
│       │   │   │   │   │       │   │       │   ├── read/
│       │   │   │   │   │       │   │       │   │   ├── Nearest.json
│       │   │   │   │   │       │   │       │   │   ├── Primary.json
│       │   │   │   │   │       │   │       │   │   ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │       │   │   ├── Secondary.json
│       │   │   │   │   │       │   │       │   │   └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       │   └── write/
│       │   │   │   │   │       │   │       │       ├── Nearest.json
│       │   │   │   │   │       │   │       │       ├── Primary.json
│       │   │   │   │   │       │   │       │       ├── PrimaryPreferred.json
│       │   │   │   │   │       │   │       │       ├── Secondary.json
│       │   │   │   │   │       │   │       │       └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       ├── Single/
│       │   │   │   │   │       │   │       │   ├── read/
│       │   │   │   │   │       │   │       │   │   └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       │   └── write/
│       │   │   │   │   │       │   │       │       └── SecondaryPreferred.json
│       │   │   │   │   │       │   │       └── Unknown/
│       │   │   │   │   │       │   │           ├── read/
│       │   │   │   │   │       │   │           │   └── SecondaryPreferred.json
│       │   │   │   │   │       │   │           └── write/
│       │   │   │   │   │       │   │               └── SecondaryPreferred.json
│       │   │   │   │   │       │   ├── sessions/
│       │   │   │   │   │       │   │   └── dirty-session-errors.json
│       │   │   │   │   │       │   ├── transactions/
│       │   │   │   │   │       │   │   ├── abort.json
│       │   │   │   │   │       │   │   ├── bulk.json
│       │   │   │   │   │       │   │   ├── causal-consistency.json
│       │   │   │   │   │       │   │   ├── commit.json
│       │   │   │   │   │       │   │   ├── count.json
│       │   │   │   │   │       │   │   ├── delete.json
│       │   │   │   │   │       │   │   ├── error-labels.json
│       │   │   │   │   │       │   │   ├── errors.json
│       │   │   │   │   │       │   │   ├── findOneAndDelete.json
│       │   │   │   │   │       │   │   ├── findOneAndReplace.json
│       │   │   │   │   │       │   │   ├── findOneAndUpdate.json
│       │   │   │   │   │       │   │   ├── insert.json
│       │   │   │   │   │       │   │   ├── isolation.json
│       │   │   │   │   │       │   │   ├── mongos-pin-auto.json
│       │   │   │   │   │       │   │   ├── mongos-recovery-token.json
│       │   │   │   │   │       │   │   ├── opts.json
│       │   │   │   │   │       │   │   ├── pin-mongos.json
│       │   │   │   │   │       │   │   ├── read-concern.json
│       │   │   │   │   │       │   │   ├── read-pref.json
│       │   │   │   │   │       │   │   ├── reads.json
│       │   │   │   │   │       │   │   ├── retryable-abort.json
│       │   │   │   │   │       │   │   ├── retryable-commit.json
│       │   │   │   │   │       │   │   ├── retryable-writes.json
│       │   │   │   │   │       │   │   ├── run-command.json
│       │   │   │   │   │       │   │   ├── transaction-options.json
│       │   │   │   │   │       │   │   ├── update.json
│       │   │   │   │   │       │   │   └── write-concern.json
│       │   │   │   │   │       │   ├── uri-options/
│       │   │   │   │   │       │   │   ├── README
│       │   │   │   │   │       │   │   ├── auth-options.json
│       │   │   │   │   │       │   │   ├── compression-options.json
│       │   │   │   │   │       │   │   ├── concern-options.json
│       │   │   │   │   │       │   │   ├── connection-options.json
│       │   │   │   │   │       │   │   ├── connection-pool-options.json
│       │   │   │   │   │       │   │   ├── read-preference-options.json
│       │   │   │   │   │       │   │   ├── single-threaded-options.json
│       │   │   │   │   │       │   │   └── tls-options.json
│       │   │   │   │   │       │   └── with_transaction/
│       │   │   │   │   │       │       ├── callback-aborts.json
│       │   │   │   │   │       │       ├── callback-commits.json
│       │   │   │   │   │       │       ├── callback-retry.json
│       │   │   │   │   │       │       ├── commit-retry.json
│       │   │   │   │   │       │       ├── commit-transienttransactionerror-4.2.json
│       │   │   │   │   │       │       ├── commit-transienttransactionerror.json
│       │   │   │   │   │       │       ├── commit-writeconcernerror.json
│       │   │   │   │   │       │       ├── commit.json
│       │   │   │   │   │       │       └── transaction-options.json
│       │   │   │   │   │       ├── json-test-monitoring.c
│       │   │   │   │   │       ├── json-test-monitoring.h
│       │   │   │   │   │       ├── json-test-operations.c
│       │   │   │   │   │       ├── json-test-operations.h
│       │   │   │   │   │       ├── json-test.c
│       │   │   │   │   │       ├── json-test.h
│       │   │   │   │   │       ├── mock_server/
│       │   │   │   │   │       │   ├── future-functions.c
│       │   │   │   │   │       │   ├── future-functions.h
│       │   │   │   │   │       │   ├── future-value.c
│       │   │   │   │   │       │   ├── future-value.h
│       │   │   │   │   │       │   ├── future.c
│       │   │   │   │   │       │   ├── future.h
│       │   │   │   │   │       │   ├── mock-rs.c
│       │   │   │   │   │       │   ├── mock-rs.h
│       │   │   │   │   │       │   ├── mock-server.c
│       │   │   │   │   │       │   ├── mock-server.h
│       │   │   │   │   │       │   ├── request.c
│       │   │   │   │   │       │   ├── request.h
│       │   │   │   │   │       │   ├── sync-queue.c
│       │   │   │   │   │       │   └── sync-queue.h
│       │   │   │   │   │       ├── release_files/
│       │   │   │   │   │       │   ├── empty-file.txt
│       │   │   │   │   │       │   ├── example-etc-fedora-release.txt
│       │   │   │   │   │       │   ├── example-etc-os-release-ubuntu1604.txt
│       │   │   │   │   │       │   ├── example-etc-os-release.txt
│       │   │   │   │   │       │   ├── example-etc-xyz-release-no-delimiter.txt
│       │   │   │   │   │       │   ├── example-key-value-file.txt
│       │   │   │   │   │       │   ├── example-lsb-file-with-super-long-line.txt
│       │   │   │   │   │       │   └── example-lsb-file.txt
│       │   │   │   │   │       ├── ssl-test.c
│       │   │   │   │   │       ├── ssl-test.h
│       │   │   │   │   │       ├── test-conveniences.c
│       │   │   │   │   │       ├── test-conveniences.h
│       │   │   │   │   │       ├── test-happy-eyeballs.c
│       │   │   │   │   │       ├── test-libmongoc.c
│       │   │   │   │   │       ├── test-libmongoc.h
│       │   │   │   │   │       ├── test-mongoc-aggregate.c
│       │   │   │   │   │       ├── test-mongoc-array.c
│       │   │   │   │   │       ├── test-mongoc-async.c
│       │   │   │   │   │       ├── test-mongoc-buffer.c
│       │   │   │   │   │       ├── test-mongoc-bulk.c
│       │   │   │   │   │       ├── test-mongoc-change-stream.c
│       │   │   │   │   │       ├── test-mongoc-client-pool.c
│       │   │   │   │   │       ├── test-mongoc-client-session.c
│       │   │   │   │   │       ├── test-mongoc-client-side-encryption.c
│       │   │   │   │   │       ├── test-mongoc-client.c
│       │   │   │   │   │       ├── test-mongoc-cluster.c
│       │   │   │   │   │       ├── test-mongoc-collection-find-with-opts.c
│       │   │   │   │   │       ├── test-mongoc-collection-find.c
│       │   │   │   │   │       ├── test-mongoc-collection.c
│       │   │   │   │   │       ├── test-mongoc-command-monitoring.c
│       │   │   │   │   │       ├── test-mongoc-connection-uri.c
│       │   │   │   │   │       ├── test-mongoc-counters.c
│       │   │   │   │   │       ├── test-mongoc-crud.c
│       │   │   │   │   │       ├── test-mongoc-cursor.c
│       │   │   │   │   │       ├── test-mongoc-cyrus.c
│       │   │   │   │   │       ├── test-mongoc-database.c
│       │   │   │   │   │       ├── test-mongoc-dns.c
│       │   │   │   │   │       ├── test-mongoc-error.c
│       │   │   │   │   │       ├── test-mongoc-exhaust.c
│       │   │   │   │   │       ├── test-mongoc-find-and-modify.c
│       │   │   │   │   │       ├── test-mongoc-gridfs-bucket.c
│       │   │   │   │   │       ├── test-mongoc-gridfs-file-page.c
│       │   │   │   │   │       ├── test-mongoc-gridfs.c
│       │   │   │   │   │       ├── test-mongoc-gssapi.c
│       │   │   │   │   │       ├── test-mongoc-handshake.c
│       │   │   │   │   │       ├── test-mongoc-linux-distro-scanner.c
│       │   │   │   │   │       ├── test-mongoc-list.c
│       │   │   │   │   │       ├── test-mongoc-log.c
│       │   │   │   │   │       ├── test-mongoc-matcher.c
│       │   │   │   │   │       ├── test-mongoc-max-staleness.c
│       │   │   │   │   │       ├── test-mongoc-mongos-pinning.c
│       │   │   │   │   │       ├── test-mongoc-opts.c
│       │   │   │   │   │       ├── test-mongoc-primary-stepdown.c
│       │   │   │   │   │       ├── test-mongoc-queue.c
│       │   │   │   │   │       ├── test-mongoc-read-concern.c
│       │   │   │   │   │       ├── test-mongoc-read-prefs.c
│       │   │   │   │   │       ├── test-mongoc-read-write-concern.c
│       │   │   │   │   │       ├── test-mongoc-retryable-reads.c
│       │   │   │   │   │       ├── test-mongoc-retryable-writes.c
│       │   │   │   │   │       ├── test-mongoc-rpc.c
│       │   │   │   │   │       ├── test-mongoc-sample-commands.c
│       │   │   │   │   │       ├── test-mongoc-scram.c
│       │   │   │   │   │       ├── test-mongoc-sdam-monitoring.c
│       │   │   │   │   │       ├── test-mongoc-sdam.c
│       │   │   │   │   │       ├── test-mongoc-server-selection-errors.c
│       │   │   │   │   │       ├── test-mongoc-server-selection.c
│       │   │   │   │   │       ├── test-mongoc-set.c
│       │   │   │   │   │       ├── test-mongoc-socket.c
│       │   │   │   │   │       ├── test-mongoc-stream-tls-error.c
│       │   │   │   │   │       ├── test-mongoc-stream-tls.c
│       │   │   │   │   │       ├── test-mongoc-stream.c
│       │   │   │   │   │       ├── test-mongoc-thread.c
│       │   │   │   │   │       ├── test-mongoc-topology-description.c
│       │   │   │   │   │       ├── test-mongoc-topology-reconcile.c
│       │   │   │   │   │       ├── test-mongoc-topology-scanner.c
│       │   │   │   │   │       ├── test-mongoc-topology.c
│       │   │   │   │   │       ├── test-mongoc-transactions.c
│       │   │   │   │   │       ├── test-mongoc-uri.c
│       │   │   │   │   │       ├── test-mongoc-usleep.c
│       │   │   │   │   │       ├── test-mongoc-util.c
│       │   │   │   │   │       ├── test-mongoc-version.c
│       │   │   │   │   │       ├── test-mongoc-with-transaction.c
│       │   │   │   │   │       ├── test-mongoc-write-commands.c
│       │   │   │   │   │       ├── test-mongoc-write-concern.c
│       │   │   │   │   │       ├── test-mongoc-x509.c
│       │   │   │   │   │       └── x509gen/
│       │   │   │   │   │           ├── 82e9b7a6.0
│       │   │   │   │   │           ├── altname.pem
│       │   │   │   │   │           ├── ca.pem
│       │   │   │   │   │           ├── client-private.pem
│       │   │   │   │   │           ├── client-public.pem
│       │   │   │   │   │           ├── client.pem
│       │   │   │   │   │           ├── commonName.pem
│       │   │   │   │   │           ├── crl.pem
│       │   │   │   │   │           ├── expired.pem
│       │   │   │   │   │           ├── legacy-ca.crt
│       │   │   │   │   │           ├── legacy-x509.pem
│       │   │   │   │   │           ├── password_protected.pem
│       │   │   │   │   │           ├── server.pem
│       │   │   │   │   │           └── wild.pem
│       │   │   │   │   ├── tools/
│       │   │   │   │   │   ├── CMakeLists.txt
│       │   │   │   │   │   └── mongoc-stat.c
│       │   │   │   │   └── zlib-1.2.11/
│       │   │   │   │       ├── .gitignore
│       │   │   │   │       ├── CMakeLists.txt
│       │   │   │   │       ├── FAQ
│       │   │   │   │       ├── INDEX
│       │   │   │   │       ├── Makefile.am
│       │   │   │   │       ├── adler32.c
│       │   │   │   │       ├── amiga/
│       │   │   │   │       │   ├── Makefile.pup
│       │   │   │   │       │   └── Makefile.sas
│       │   │   │   │       ├── compress.c
│       │   │   │   │       ├── contrib/
│       │   │   │   │       │   ├── README.contrib
│       │   │   │   │       │   ├── ada/
│       │   │   │   │       │   │   ├── buffer_demo.adb
│       │   │   │   │       │   │   ├── mtest.adb
│       │   │   │   │       │   │   ├── read.adb
│       │   │   │   │       │   │   ├── readme.txt
│       │   │   │   │       │   │   ├── test.adb
│       │   │   │   │       │   │   ├── zlib-streams.adb
│       │   │   │   │       │   │   ├── zlib-streams.ads
│       │   │   │   │       │   │   ├── zlib-thin.adb
│       │   │   │   │       │   │   ├── zlib-thin.ads
│       │   │   │   │       │   │   ├── zlib.adb
│       │   │   │   │       │   │   ├── zlib.ads
│       │   │   │   │       │   │   └── zlib.gpr
│       │   │   │   │       │   ├── amd64/
│       │   │   │   │       │   │   └── amd64-match.S
│       │   │   │   │       │   ├── asm686/
│       │   │   │   │       │   │   ├── README.686
│       │   │   │   │       │   │   └── match.S
│       │   │   │   │       │   ├── blast/
│       │   │   │   │       │   │   ├── blast.c
│       │   │   │   │       │   │   ├── blast.h
│       │   │   │   │       │   │   ├── test.pk
│       │   │   │   │       │   │   └── test.txt
│       │   │   │   │       │   ├── delphi/
│       │   │   │   │       │   │   ├── ZLib.pas
│       │   │   │   │       │   │   ├── ZLibConst.pas
│       │   │   │   │       │   │   ├── readme.txt
│       │   │   │   │       │   │   └── zlibd32.mak
│       │   │   │   │       │   ├── dotzlib/
│       │   │   │   │       │   │   ├── DotZLib/
│       │   │   │   │       │   │   │   ├── AssemblyInfo.cs
│       │   │   │   │       │   │   │   ├── ChecksumImpl.cs
│       │   │   │   │       │   │   │   ├── CircularBuffer.cs
│       │   │   │   │       │   │   │   ├── CodecBase.cs
│       │   │   │   │       │   │   │   ├── Deflater.cs
│       │   │   │   │       │   │   │   ├── DotZLib.cs
│       │   │   │   │       │   │   │   ├── DotZLib.csproj
│       │   │   │   │       │   │   │   ├── GZipStream.cs
│       │   │   │   │       │   │   │   ├── Inflater.cs
│       │   │   │   │       │   │   │   └── UnitTests.cs
│       │   │   │   │       │   │   ├── DotZLib.build
│       │   │   │   │       │   │   ├── DotZLib.chm
│       │   │   │   │       │   │   ├── LICENSE_1_0.txt
│       │   │   │   │       │   │   └── readme.txt
│       │   │   │   │       │   ├── gcc_gvmat64/
│       │   │   │   │       │   │   └── gvmat64.S
│       │   │   │   │       │   ├── infback9/
│       │   │   │   │       │   │   ├── infback9.c
│       │   │   │   │       │   │   ├── infback9.h
│       │   │   │   │       │   │   ├── inffix9.h
│       │   │   │   │       │   │   ├── inflate9.h
│       │   │   │   │       │   │   ├── inftree9.c
│       │   │   │   │       │   │   └── inftree9.h
│       │   │   │   │       │   ├── inflate86/
│       │   │   │   │       │   │   ├── inffas86.c
│       │   │   │   │       │   │   └── inffast.S
│       │   │   │   │       │   ├── iostream/
│       │   │   │   │       │   │   ├── test.cpp
│       │   │   │   │       │   │   ├── zfstream.cpp
│       │   │   │   │       │   │   └── zfstream.h
│       │   │   │   │       │   ├── iostream2/
│       │   │   │   │       │   │   ├── zstream.h
│       │   │   │   │       │   │   └── zstream_test.cpp
│       │   │   │   │       │   ├── iostream3/
│       │   │   │   │       │   │   ├── TODO
│       │   │   │   │       │   │   ├── test.cc
│       │   │   │   │       │   │   ├── zfstream.cc
│       │   │   │   │       │   │   └── zfstream.h
│       │   │   │   │       │   ├── masmx64/
│       │   │   │   │       │   │   ├── bld_ml64.bat
│       │   │   │   │       │   │   ├── gvmat64.asm
│       │   │   │   │       │   │   ├── inffas8664.c
│       │   │   │   │       │   │   ├── inffasx64.asm
│       │   │   │   │       │   │   └── readme.txt
│       │   │   │   │       │   ├── masmx86/
│       │   │   │   │       │   │   ├── bld_ml32.bat
│       │   │   │   │       │   │   ├── inffas32.asm
│       │   │   │   │       │   │   ├── match686.asm
│       │   │   │   │       │   │   └── readme.txt
│       │   │   │   │       │   ├── minizip/
│       │   │   │   │       │   │   ├── Makefile.am
│       │   │   │   │       │   │   ├── MiniZip64_Changes.txt
│       │   │   │   │       │   │   ├── MiniZip64_info.txt
│       │   │   │   │       │   │   ├── configure.ac
│       │   │   │   │       │   │   ├── crypt.h
│       │   │   │   │       │   │   ├── ioapi.c
│       │   │   │   │       │   │   ├── ioapi.h
│       │   │   │   │       │   │   ├── iowin32.c
│       │   │   │   │       │   │   ├── iowin32.h
│       │   │   │   │       │   │   ├── make_vms.com
│       │   │   │   │       │   │   ├── miniunz.c
│       │   │   │   │       │   │   ├── miniunzip.1
│       │   │   │   │       │   │   ├── minizip.1
│       │   │   │   │       │   │   ├── minizip.c
│       │   │   │   │       │   │   ├── minizip.pc.in
│       │   │   │   │       │   │   ├── mztools.c
│       │   │   │   │       │   │   ├── mztools.h
│       │   │   │   │       │   │   ├── unzip.c
│       │   │   │   │       │   │   ├── unzip.h
│       │   │   │   │       │   │   ├── zip.c
│       │   │   │   │       │   │   └── zip.h
│       │   │   │   │       │   ├── pascal/
│       │   │   │   │       │   │   ├── example.pas
│       │   │   │   │       │   │   ├── readme.txt
│       │   │   │   │       │   │   ├── zlibd32.mak
│       │   │   │   │       │   │   └── zlibpas.pas
│       │   │   │   │       │   ├── puff/
│       │   │   │   │       │   │   ├── puff.c
│       │   │   │   │       │   │   ├── puff.h
│       │   │   │   │       │   │   ├── pufftest.c
│       │   │   │   │       │   │   └── zeros.raw
│       │   │   │   │       │   ├── testzlib/
│       │   │   │   │       │   │   ├── testzlib.c
│       │   │   │   │       │   │   └── testzlib.txt
│       │   │   │   │       │   ├── untgz/
│       │   │   │   │       │   │   ├── Makefile.msc
│       │   │   │   │       │   │   └── untgz.c
│       │   │   │   │       │   └── vstudio/
│       │   │   │   │       │       ├── readme.txt
│       │   │   │   │       │       ├── vc10/
│       │   │   │   │       │       │   ├── zlib.rc
│       │   │   │   │       │       │   └── zlibvc.def
│       │   │   │   │       │       ├── vc11/
│       │   │   │   │       │       │   ├── zlib.rc
│       │   │   │   │       │       │   └── zlibvc.def
│       │   │   │   │       │       ├── vc12/
│       │   │   │   │       │       │   ├── zlib.rc
│       │   │   │   │       │       │   └── zlibvc.def
│       │   │   │   │       │       ├── vc14/
│       │   │   │   │       │       │   ├── zlib.rc
│       │   │   │   │       │       │   └── zlibvc.def
│       │   │   │   │       │       └── vc9/
│       │   │   │   │       │           ├── miniunz.vcproj
│       │   │   │   │       │           ├── minizip.vcproj
│       │   │   │   │       │           ├── testzlib.vcproj
│       │   │   │   │       │           ├── testzlibdll.vcproj
│       │   │   │   │       │           ├── zlib.rc
│       │   │   │   │       │           ├── zlibstat.vcproj
│       │   │   │   │       │           ├── zlibvc.def
│       │   │   │   │       │           └── zlibvc.vcproj
│       │   │   │   │       ├── crc32.c
│       │   │   │   │       ├── crc32.h
│       │   │   │   │       ├── deflate.c
│       │   │   │   │       ├── deflate.h
│       │   │   │   │       ├── doc/
│       │   │   │   │       │   ├── algorithm.txt
│       │   │   │   │       │   ├── rfc1950.txt
│       │   │   │   │       │   ├── rfc1951.txt
│       │   │   │   │       │   ├── rfc1952.txt
│       │   │   │   │       │   └── txtvsbin.txt
│       │   │   │   │       ├── examples/
│       │   │   │   │       │   ├── README.examples
│       │   │   │   │       │   ├── enough.c
│       │   │   │   │       │   ├── fitblk.c
│       │   │   │   │       │   ├── gun.c
│       │   │   │   │       │   ├── gzappend.c
│       │   │   │   │       │   ├── gzjoin.c
│       │   │   │   │       │   ├── gzlog.c
│       │   │   │   │       │   ├── gzlog.h
│       │   │   │   │       │   ├── zlib_how.html
│       │   │   │   │       │   ├── zpipe.c
│       │   │   │   │       │   └── zran.c
│       │   │   │   │       ├── gzclose.c
│       │   │   │   │       ├── gzguts.h
│       │   │   │   │       ├── gzlib.c
│       │   │   │   │       ├── gzread.c
│       │   │   │   │       ├── gzwrite.c
│       │   │   │   │       ├── infback.c
│       │   │   │   │       ├── inffast.c
│       │   │   │   │       ├── inffast.h
│       │   │   │   │       ├── inffixed.h
│       │   │   │   │       ├── inflate.c
│       │   │   │   │       ├── inflate.h
│       │   │   │   │       ├── inftrees.c
│       │   │   │   │       ├── inftrees.h
│       │   │   │   │       ├── make_vms.com
│       │   │   │   │       ├── msdos/
│       │   │   │   │       │   ├── Makefile.bor
│       │   │   │   │       │   ├── Makefile.dj2
│       │   │   │   │       │   ├── Makefile.emx
│       │   │   │   │       │   ├── Makefile.msc
│       │   │   │   │       │   └── Makefile.tc
│       │   │   │   │       ├── old/
│       │   │   │   │       │   ├── Makefile.emx
│       │   │   │   │       │   ├── Makefile.riscos
│       │   │   │   │       │   ├── descrip.mms
│       │   │   │   │       │   ├── os2/
│       │   │   │   │       │   │   ├── Makefile.os2
│       │   │   │   │       │   │   └── zlib.def
│       │   │   │   │       │   └── visual-basic.txt
│       │   │   │   │       ├── os400/
│       │   │   │   │       │   ├── README400
│       │   │   │   │       │   ├── bndsrc
│       │   │   │   │       │   ├── make.sh
│       │   │   │   │       │   └── zlib.inc
│       │   │   │   │       ├── qnx/
│       │   │   │   │       │   └── package.qpg
│       │   │   │   │       ├── test/
│       │   │   │   │       │   ├── example.c
│       │   │   │   │       │   ├── infcover.c
│       │   │   │   │       │   └── minigzip.c
│       │   │   │   │       ├── treebuild.xml
│       │   │   │   │       ├── trees.c
│       │   │   │   │       ├── trees.h
│       │   │   │   │       ├── uncompr.c
│       │   │   │   │       ├── watcom/
│       │   │   │   │       │   ├── watcom_f.mak
│       │   │   │   │       │   └── watcom_l.mak
│       │   │   │   │       ├── win32/
│       │   │   │   │       │   ├── DLL_FAQ.txt
│       │   │   │   │       │   ├── Makefile.bor
│       │   │   │   │       │   ├── Makefile.gcc
│       │   │   │   │       │   ├── Makefile.msc
│       │   │   │   │       │   ├── README-WIN32.txt
│       │   │   │   │       │   ├── VisualC.txt
│       │   │   │   │       │   ├── zlib.def
│       │   │   │   │       │   └── zlib1.rc
│       │   │   │   │       ├── zconf.h.cmakein
│       │   │   │   │       ├── zconf.h.in
│       │   │   │   │       ├── zlib.3
│       │   │   │   │       ├── zlib.h
│       │   │   │   │       ├── zlib.pc.cmakein
│       │   │   │   │       ├── zlib.pc.in
│       │   │   │   │       ├── zlib2ansi
│       │   │   │   │       ├── zutil.c
│     
Download .txt
Showing preview only (2,927K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (36796 symbols across 2507 files)

FILE: core/src/lib/3rd/3dmath/box.c
  function boxOffset (line 4) | void boxOffset(struct Box* box, struct Vector3* by, struct Box* result) {

FILE: core/src/lib/3rd/3dmath/box.h
  type Box (line 7) | struct Box {
  type Box (line 11) | struct Box
  type Vector3 (line 11) | struct Vector3
  type Box (line 11) | struct Box

FILE: core/src/lib/3rd/3dmath/mathf.c
  function randomInt (line 7) | int randomInt() {
  function fsign (line 12) | float fsign(float in) {
  function mathfLerp (line 22) | float mathfLerp(float from, float to, float t) {
  function mathfMoveTowards (line 26) | float mathfMoveTowards(float from, float to, float maxMove) {
  function mathfBounceBackLerp (line 35) | float mathfBounceBackLerp(float t) {
  function mathfRandomFloat (line 39) | float mathfRandomFloat() {

FILE: core/src/lib/3rd/3dmath/matrix4.c
  function matrix4Determinant (line 9) | float matrix4Determinant(struct Matrix4* in) {
  function matrix4LookAt (line 56) | void matrix4LookAt(struct Vector3 *eye, struct Vector3* target, struct V...
  function matrix4Compose (line 103) | void matrix4Compose(struct Vector3* position, struct Quaternion* quatern...
  function decompose (line 137) | void decompose(struct Matrix4* in, struct Vector3* position, struct Quat...
  function matrix4RotationFromQuaternion (line 181) | void matrix4RotationFromQuaternion(struct Quaternion* q, struct Matrix4*...

FILE: core/src/lib/3rd/3dmath/matrix4.h
  type Matrix4 (line 3) | struct Matrix4 {
  type Vector3 (line 17) | struct Vector3
  type Vector3 (line 17) | struct Vector3
  type Vector3 (line 17) | struct Vector3
  type Matrix4 (line 17) | struct Matrix4

FILE: core/src/lib/3rd/3dmath/plane.c
  function planeFromNormalPoint (line 4) | void planeFromNormalPoint(struct Vector3* normal, struct Vector3* point,...
  function planeProjectOnto (line 11) | void planeProjectOnto(struct Plane* plane, struct Vector3* point, struct...
  function planeDistanceFromPoint (line 18) | float planeDistanceFromPoint(struct Plane* plane, struct Vector3* point) {
  function planeFrustumExtractFromMtx (line 22) | void planeFrustumExtractFromMtx(float mtx[4][4], struct Plane planes[4]) {
  function planeNormalize (line 49) | void planeNormalize(struct Plane* plane) {
  function planeIsBoxBehind (line 53) | int planeIsBoxBehind(struct Plane* plane, struct Box* box) {
  function planeIsSphereBehind (line 68) | int planeIsSphereBehind(struct Plane* plane, struct Vector3* origin, flo...

FILE: core/src/lib/3rd/3dmath/plane.h
  type Plane (line 12) | struct Plane {
  type Vector3 (line 22) | struct Vector3
  type Vector3 (line 22) | struct Vector3
  type Plane (line 22) | struct Plane
  type Plane (line 23) | struct Plane
  type Vector3 (line 23) | struct Vector3
  type Vector3 (line 23) | struct Vector3
  type Plane (line 24) | struct Plane
  type Vector3 (line 24) | struct Vector3
  type Plane (line 25) | struct Plane
  type Plane (line 26) | struct Plane
  type Plane (line 27) | struct Plane
  type Box (line 27) | struct Box
  type Plane (line 28) | struct Plane
  type Vector3 (line 28) | struct Vector3

FILE: core/src/lib/3rd/3dmath/quaternion.c
  function Radians (line 10) | void Radians(struct Vector3* in, struct Vector3* out) {
  function Degree (line 16) | void Degree(struct Vector3* in, struct Vector3* out) {
  function quatIdent (line 22) | void quatIdent(struct Quaternion* q) {
  function quatAxisAngle (line 29) | void quatAxisAngle(struct Vector3* axis, float angle, struct Quaternion*...
  function NormalizeAngle (line 39) | float NormalizeAngle(float angle)
  function NormalizeAngles (line 48) | void NormalizeAngles(struct Vector3* angles, struct Vector3* out)
  function quatEulerAngles (line 56) | void quatEulerAngles(struct Vector3* angles, struct Quaternion* out) {
  function quatAxisComplex (line 72) | void quatAxisComplex(struct Vector3* axis, struct Vector2* complex, stru...
  function quatConjugate (line 99) | void quatConjugate(struct Quaternion* in, struct Quaternion* out) {
  function quatMultVector (line 107) | void quatMultVector(struct Quaternion* q, struct Vector3* a, struct Vect...
  function quatMultiply (line 125) | void quatMultiply(struct Quaternion* a, struct Quaternion* b, struct Qua...
  function quatFromRotationMatrix (line 132) | void quatFromRotationMatrix(struct Matrix4* m, struct Quaternion* q) {
  function quatNormalize (line 186) | void quatNormalize(struct Quaternion* q, struct Quaternion* out) {
  function quatRandom (line 205) | void quatRandom(struct Quaternion* q) {
  function quatFromToRotation (line 214) | void quatFromToRotation(struct Vector3* fromDirection, struct Vector3* t...
  function quatLookRotation (line 261) | void quatLookRotation(struct Vector3* forward, struct Quaternion* out)
  function quatLookRotationWithUpwards (line 267) | void quatLookRotationWithUpwards(struct Vector3* forward, struct Vector3...
  function quatToEulerAngles (line 289) | void quatToEulerAngles(struct Quaternion* q, struct Vector3* out)
  function ClampAxis (line 304) | float ClampAxis(float Angle)
  function NormalizeAxis (line 318) | float NormalizeAxis(float Angle)

FILE: core/src/lib/3rd/3dmath/quaternion.h
  type Quaternion (line 14) | struct Quaternion {
  type Quaternion (line 18) | struct Quaternion
  type Vector3 (line 19) | struct Vector3
  type Quaternion (line 19) | struct Quaternion
  type Vector3 (line 20) | struct Vector3
  type Vector2 (line 20) | struct Vector2
  type Quaternion (line 20) | struct Quaternion
  type Quaternion (line 21) | struct Quaternion
  type Quaternion (line 21) | struct Quaternion
  type Quaternion (line 22) | struct Quaternion
  type Vector3 (line 22) | struct Vector3
  type Vector3 (line 22) | struct Vector3
  type Quaternion (line 23) | struct Quaternion
  type Quaternion (line 23) | struct Quaternion
  type Quaternion (line 23) | struct Quaternion
  type Quaternion (line 24) | struct Quaternion
  type Quaternion (line 24) | struct Quaternion
  type Quaternion (line 25) | struct Quaternion
  type Vector3 (line 26) | struct Vector3
  type Quaternion (line 26) | struct Quaternion
  type Quaternion (line 27) | struct Quaternion
  type Vector3 (line 27) | struct Vector3
  type Vector3 (line 28) | struct Vector3
  type Quaternion (line 28) | struct Quaternion
  type Vector3 (line 29) | struct Vector3
  type Vector3 (line 29) | struct Vector3
  type Quaternion (line 29) | struct Quaternion
  type Vector3 (line 30) | struct Vector3
  type Vector3 (line 30) | struct Vector3
  type Quaternion (line 30) | struct Quaternion
  type Vector3 (line 31) | struct Vector3
  type Vector3 (line 31) | struct Vector3
  type Vector3 (line 32) | struct Vector3
  type Vector3 (line 32) | struct Vector3
  type Matrix4 (line 33) | struct Matrix4
  type Quaternion (line 33) | struct Quaternion
  type Vector3 (line 35) | struct Vector3
  type Quaternion (line 35) | struct Quaternion
  type Quaternion (line 36) | struct Quaternion
  type Vector3 (line 36) | struct Vector3

FILE: core/src/lib/3rd/3dmath/ray.c
  function rayProjectOnto (line 4) | void rayProjectOnto(struct Vector3* origin, struct Vector3* dir, struct ...
  function rayPointAtDistance (line 14) | void rayPointAtDistance(struct Vector3* origin, struct Vector3* dir, flo...

FILE: core/src/lib/3rd/3dmath/ray.h
  type Vector3 (line 7) | struct Vector3
  type Vector3 (line 7) | struct Vector3
  type Vector3 (line 7) | struct Vector3
  type Vector3 (line 7) | struct Vector3
  type Vector3 (line 8) | struct Vector3
  type Vector3 (line 8) | struct Vector3
  type Vector3 (line 8) | struct Vector3

FILE: core/src/lib/3rd/3dmath/transform.c
  function transformConcat (line 5) | void transformConcat(struct BasicTransform* a, struct BasicTransform* b,...
  function transformPoint (line 16) | void transformPoint(struct BasicTransform* trans, struct Vector3* in, st...
  function transformPointInverse (line 24) | void transformPointInverse(struct BasicTransform* trans, struct Vector3*...
  function transformDirection (line 34) | void transformDirection(struct BasicTransform* trans, struct Vector3* in...
  function transformDirectionInverse (line 38) | void transformDirectionInverse(struct BasicTransform* trans, struct Vect...
  function transformInvert (line 44) | void transformInvert(struct BasicTransform* in, struct BasicTransform* o...
  function transformToMatrix (line 53) | void transformToMatrix(struct BasicTransform* in, float worldScale, floa...
  function transformIdentity (line 69) | void transformIdentity(struct BasicTransform* trans) {
  function transformForward (line 75) | void transformForward(struct BasicTransform* in, struct Vector3* out) {

FILE: core/src/lib/3rd/3dmath/transform.h
  type BasicTransform (line 8) | struct BasicTransform {
  type BasicTransform (line 15) | struct BasicTransform
  type BasicTransform (line 15) | struct BasicTransform
  type BasicTransform (line 15) | struct BasicTransform
  type BasicTransform (line 16) | struct BasicTransform
  type Vector3 (line 16) | struct Vector3
  type Vector3 (line 16) | struct Vector3
  type BasicTransform (line 17) | struct BasicTransform
  type Vector3 (line 17) | struct Vector3
  type Vector3 (line 17) | struct Vector3
  type BasicTransform (line 18) | struct BasicTransform
  type Vector3 (line 18) | struct Vector3
  type Vector3 (line 18) | struct Vector3
  type BasicTransform (line 19) | struct BasicTransform
  type Vector3 (line 19) | struct Vector3
  type Vector3 (line 19) | struct Vector3
  type BasicTransform (line 20) | struct BasicTransform
  type BasicTransform (line 20) | struct BasicTransform
  type BasicTransform (line 21) | struct BasicTransform
  type BasicTransform (line 22) | struct BasicTransform
  type Vector3 (line 22) | struct Vector3
  type BasicTransform (line 24) | struct BasicTransform

FILE: core/src/lib/3rd/3dmath/vector.c
  type Vector3 (line 5) | struct Vector3
  type Vector3 (line 6) | struct Vector3
  type Vector3 (line 7) | struct Vector3
  type Vector3 (line 8) | struct Vector3
  type Vector3 (line 9) | struct Vector3
  function vector3Negate (line 11) | void vector3Negate(struct Vector3* in, struct Vector3* out) {
  function vector3Scale (line 17) | void vector3Scale(struct Vector3* in, struct Vector3* out, float scale) {
  function vector3Add (line 23) | void vector3Add(struct Vector3* a, struct Vector3* b, struct Vector3* ou...
  function vector3AddScaled (line 29) | void vector3AddScaled(struct Vector3* a, struct Vector3* normal, float s...
  function vector3Sub (line 35) | void vector3Sub(struct Vector3* a, struct Vector3* b, struct Vector3* ou...
  function vector3Normalize (line 41) | void vector3Normalize(struct Vector3* in, struct Vector3* out) {
  function vector3Lerp (line 54) | void vector3Lerp(struct Vector3* a, struct Vector3* b, float t, struct V...
  function vector3Dot (line 61) | float vector3Dot(struct Vector3* a, struct Vector3* b) {
  function vector3MagSqrd (line 65) | float vector3MagSqrd(struct Vector3* a) {
  function vector3MagLength (line 69) | float vector3MagLength(struct Vector3* a) {
  function vector3DistSqrd (line 73) | float vector3DistSqrd(struct Vector3* a, struct Vector3* b) {
  function vector3Cross (line 81) | void vector3Cross(struct Vector3* a, struct Vector3* b, struct Vector3* ...
  function vector3Project (line 87) | void vector3Project(struct Vector3* in, struct Vector3* normal, struct V...
  function vector3ProjectPlane (line 94) | void vector3ProjectPlane(struct Vector3* in, struct Vector3* normal, str...
  function vector3MoveTowards (line 101) | void vector3MoveTowards(struct Vector3* from, struct Vector3* towards, f...

FILE: core/src/lib/3rd/3dmath/vector.h
  type Vector3 (line 5) | struct Vector3 {
  type Vector3 (line 14) | struct Vector3
  type Vector3 (line 15) | struct Vector3
  type Vector3 (line 16) | struct Vector3
  type Vector3 (line 17) | struct Vector3
  type Vector3 (line 18) | struct Vector3
  type Vector3 (line 20) | struct Vector3
  type Vector3 (line 20) | struct Vector3
  type Vector3 (line 21) | struct Vector3
  type Vector3 (line 21) | struct Vector3
  type Vector3 (line 22) | struct Vector3
  type Vector3 (line 22) | struct Vector3
  type Vector3 (line 22) | struct Vector3
  type Vector3 (line 23) | struct Vector3
  type Vector3 (line 23) | struct Vector3
  type Vector3 (line 23) | struct Vector3
  type Vector3 (line 24) | struct Vector3
  type Vector3 (line 24) | struct Vector3
  type Vector3 (line 24) | struct Vector3
  type Vector3 (line 25) | struct Vector3
  type Vector3 (line 25) | struct Vector3
  type Vector3 (line 26) | struct Vector3
  type Vector3 (line 26) | struct Vector3
  type Vector3 (line 26) | struct Vector3
  type Vector3 (line 27) | struct Vector3
  type Vector3 (line 27) | struct Vector3
  type Vector3 (line 28) | struct Vector3
  type Vector3 (line 29) | struct Vector3
  type Vector3 (line 29) | struct Vector3
  type Vector3 (line 30) | struct Vector3
  type Vector3 (line 30) | struct Vector3
  type Vector3 (line 30) | struct Vector3
  type Vector3 (line 31) | struct Vector3
  type Vector3 (line 31) | struct Vector3
  type Vector3 (line 31) | struct Vector3
  type Vector3 (line 32) | struct Vector3
  type Vector3 (line 32) | struct Vector3
  type Vector3 (line 32) | struct Vector3
  type Vector3 (line 33) | struct Vector3
  type Vector3 (line 33) | struct Vector3
  type Vector3 (line 33) | struct Vector3
  type Vector3 (line 34) | struct Vector3

FILE: core/src/lib/3rd/3dmath/vector2.c
  type Vector2 (line 5) | struct Vector2
  type Vector2 (line 6) | struct Vector2
  function vector2ComplexMul (line 8) | void vector2ComplexMul(struct Vector2* a, struct Vector2* b, struct Vect...
  function vector2RotateTowards (line 14) | void vector2RotateTowards(struct Vector2* from, struct Vector2* towards,...
  function vector2Cross (line 32) | float vector2Cross(struct Vector2* a, struct Vector2* b) {
  function vector2Dot (line 36) | float vector2Dot(struct Vector2* a, struct Vector2* b) {
  function vector2Scale (line 40) | void vector2Scale(struct Vector2* a, float scale, struct Vector2* out) {
  function vector2Normalize (line 45) | void vector2Normalize(struct Vector2* a, struct Vector2* out) {

FILE: core/src/lib/3rd/3dmath/vector2.h
  type Vector2 (line 5) | struct Vector2 {
  type Vector2 (line 14) | struct Vector2
  type Vector2 (line 15) | struct Vector2
  type Vector2 (line 17) | struct Vector2
  type Vector2 (line 17) | struct Vector2
  type Vector2 (line 17) | struct Vector2
  type Vector2 (line 18) | struct Vector2
  type Vector2 (line 18) | struct Vector2
  type Vector2 (line 18) | struct Vector2
  type Vector2 (line 18) | struct Vector2
  type Vector2 (line 19) | struct Vector2
  type Vector2 (line 19) | struct Vector2
  type Vector2 (line 20) | struct Vector2
  type Vector2 (line 20) | struct Vector2
  type Vector2 (line 21) | struct Vector2
  type Vector2 (line 21) | struct Vector2
  type Vector2 (line 22) | struct Vector2
  type Vector2 (line 22) | struct Vector2

FILE: core/src/lib/3rd/hiredis/adapters/ae.h
  type redisAeEvents (line 38) | typedef struct redisAeEvents {
  function redisAeReadEvent (line 45) | static void redisAeReadEvent(aeEventLoop *el, int fd, void *privdata, in...
  function redisAeWriteEvent (line 52) | static void redisAeWriteEvent(aeEventLoop *el, int fd, void *privdata, i...
  function redisAeAddRead (line 59) | static void redisAeAddRead(void *privdata) {
  function redisAeDelRead (line 68) | static void redisAeDelRead(void *privdata) {
  function redisAeAddWrite (line 77) | static void redisAeAddWrite(void *privdata) {
  function redisAeDelWrite (line 86) | static void redisAeDelWrite(void *privdata) {
  function redisAeCleanup (line 95) | static void redisAeCleanup(void *privdata) {
  function redisAeAttach (line 102) | static int redisAeAttach(aeEventLoop *loop, redisAsyncContext *ac) {

FILE: core/src/lib/3rd/hiredis/adapters/glib.h
  type RedisSource (line 9) | typedef struct
  function redis_source_add_read (line 16) | static void
  function redis_source_del_read (line 25) | static void
  function redis_source_add_write (line 34) | static void
  function redis_source_del_write (line 43) | static void
  function redis_source_cleanup (line 52) | static void
  function gboolean (line 71) | static gboolean
  function gboolean (line 80) | static gboolean
  function gboolean (line 87) | static gboolean
  function redis_source_finalize (line 111) | static void
  function GSource (line 122) | static GSource *

FILE: core/src/lib/3rd/hiredis/adapters/ivykis.h
  type redisIvykisEvents (line 7) | typedef struct redisIvykisEvents {
  function redisIvykisReadEvent (line 12) | static void redisIvykisReadEvent(void *arg) {
  function redisIvykisWriteEvent (line 17) | static void redisIvykisWriteEvent(void *arg) {
  function redisIvykisAddRead (line 22) | static void redisIvykisAddRead(void *privdata) {
  function redisIvykisDelRead (line 27) | static void redisIvykisDelRead(void *privdata) {
  function redisIvykisAddWrite (line 32) | static void redisIvykisAddWrite(void *privdata) {
  function redisIvykisDelWrite (line 37) | static void redisIvykisDelWrite(void *privdata) {
  function redisIvykisCleanup (line 42) | static void redisIvykisCleanup(void *privdata) {
  function redisIvykisAttach (line 49) | static int redisIvykisAttach(redisAsyncContext *ac) {

FILE: core/src/lib/3rd/hiredis/adapters/libev.h
  type redisLibevEvents (line 39) | typedef struct redisLibevEvents {
  function redisLibevReadEvent (line 47) | static void redisLibevReadEvent(EV_P_ ev_io *watcher, int revents) {
  function redisLibevWriteEvent (line 57) | static void redisLibevWriteEvent(EV_P_ ev_io *watcher, int revents) {
  function redisLibevAddRead (line 67) | static void redisLibevAddRead(void *privdata) {
  function redisLibevDelRead (line 77) | static void redisLibevDelRead(void *privdata) {
  function redisLibevAddWrite (line 87) | static void redisLibevAddWrite(void *privdata) {
  function redisLibevDelWrite (line 97) | static void redisLibevDelWrite(void *privdata) {
  function redisLibevStopTimer (line 107) | static void redisLibevStopTimer(void *privdata) {
  function redisLibevCleanup (line 114) | static void redisLibevCleanup(void *privdata) {
  function redisLibevTimeout (line 122) | static void redisLibevTimeout(EV_P_ ev_timer *timer, int revents) {
  function redisLibevSetTimeout (line 128) | static void redisLibevSetTimeout(void *privdata, struct timeval tv) {
  function redisLibevAttach (line 142) | static int redisLibevAttach(EV_P_ redisAsyncContext *ac) {

FILE: core/src/lib/3rd/hiredis/adapters/libevent.h
  type redisLibeventEvents (line 40) | typedef struct redisLibeventEvents {
  function redisLibeventDestroy (line 49) | static void redisLibeventDestroy(redisLibeventEvents *e) {
  function redisLibeventHandler (line 53) | static void redisLibeventHandler(int fd, short event, void *arg) {
  function redisLibeventUpdate (line 82) | static void redisLibeventUpdate(void *privdata, short flag, int isRemove) {
  function redisLibeventAddRead (line 106) | static void redisLibeventAddRead(void *privdata) {
  function redisLibeventDelRead (line 110) | static void redisLibeventDelRead(void *privdata) {
  function redisLibeventAddWrite (line 114) | static void redisLibeventAddWrite(void *privdata) {
  function redisLibeventDelWrite (line 118) | static void redisLibeventDelWrite(void *privdata) {
  function redisLibeventCleanup (line 122) | static void redisLibeventCleanup(void *privdata) {
  function redisLibeventSetTimeout (line 138) | static void redisLibeventSetTimeout(void *privdata, struct timeval tv) {
  function redisLibeventAttach (line 146) | static int redisLibeventAttach(redisAsyncContext *ac, struct event_base ...

FILE: core/src/lib/3rd/hiredis/adapters/libuv.h
  type redisLibuvEvents (line 9) | typedef struct redisLibuvEvents {
  function redisLibuvPoll (line 16) | static void redisLibuvPoll(uv_poll_t* handle, int status, int events) {
  function redisLibuvAddRead (line 29) | static void redisLibuvAddRead(void *privdata) {
  function redisLibuvDelRead (line 38) | static void redisLibuvDelRead(void *privdata) {
  function redisLibuvAddWrite (line 51) | static void redisLibuvAddWrite(void *privdata) {
  function redisLibuvDelWrite (line 60) | static void redisLibuvDelWrite(void *privdata) {
  function on_close (line 73) | static void on_close(uv_handle_t* handle) {
  function redisLibuvCleanup (line 80) | static void redisLibuvCleanup(void *privdata) {
  function redisLibuvAttach (line 88) | static int redisLibuvAttach(redisAsyncContext* ac, uv_loop_t* loop) {

FILE: core/src/lib/3rd/hiredis/adapters/macosx.h
  type RedisRunLoop (line 14) | typedef struct {
  function freeRedisRunLoop (line 20) | static int freeRedisRunLoop(RedisRunLoop* redisRunLoop) {
  function redisMacOSAddRead (line 35) | static void redisMacOSAddRead(void *privdata) {
  function redisMacOSDelRead (line 40) | static void redisMacOSDelRead(void *privdata) {
  function redisMacOSAddWrite (line 45) | static void redisMacOSAddWrite(void *privdata) {
  function redisMacOSDelWrite (line 50) | static void redisMacOSDelWrite(void *privdata) {
  function redisMacOSCleanup (line 55) | static void redisMacOSCleanup(void *privdata) {
  function redisMacOSAsyncCallback (line 60) | static void redisMacOSAsyncCallback(CFSocketRef __unused s, CFSocketCall...
  function redisMacOSAttach (line 77) | static int redisMacOSAttach(redisAsyncContext *redisAsyncCtx, CFRunLoopR...

FILE: core/src/lib/3rd/hiredis/adapters/qt.h
  function class (line 37) | class RedisQtAdapter : public QObject {

FILE: core/src/lib/3rd/hiredis/alloc.c
  function hiredisAllocFuncs (line 45) | hiredisAllocFuncs hiredisSetAllocators(hiredisAllocFuncs *override) {
  function hiredisResetAllocators (line 54) | void hiredisResetAllocators(void) {
  function hi_free (line 86) | void hi_free(void *ptr) {

FILE: core/src/lib/3rd/hiredis/alloc.h
  type hiredisAllocFuncs (line 42) | typedef struct hiredisAllocFuncs {
  function hi_free (line 78) | static inline void hi_free(void *ptr) {

FILE: core/src/lib/3rd/hiredis/async.c
  function callbackHash (line 60) | static unsigned int callbackHash(const void *key) {
  function callbackKeyCompare (line 77) | static int callbackKeyCompare(void *privdata, const void *key1, const vo...
  function callbackKeyDestructor (line 87) | static void callbackKeyDestructor(void *privdata, void *key) {
  function callbackValDestructor (line 92) | static void callbackValDestructor(void *privdata, void *val) {
  function redisAsyncContext (line 106) | static redisAsyncContext *redisAsyncInitialize(redisContext *c) {
  function __redisAsyncCopyError (line 161) | static void __redisAsyncCopyError(redisAsyncContext *ac) {
  function redisAsyncContext (line 170) | redisAsyncContext *redisAsyncConnectWithOptions(const redisOptions *opti...
  function redisAsyncContext (line 199) | redisAsyncContext *redisAsyncConnect(const char *ip, int port) {
  function redisAsyncContext (line 205) | redisAsyncContext *redisAsyncConnectBind(const char *ip, int port,
  function redisAsyncContext (line 213) | redisAsyncContext *redisAsyncConnectBindWithReuse(const char *ip, int port,
  function redisAsyncContext (line 222) | redisAsyncContext *redisAsyncConnectUnix(const char *path) {
  function redisAsyncSetConnectCallback (line 228) | int redisAsyncSetConnectCallback(redisAsyncContext *ac, redisConnectCall...
  function redisAsyncSetDisconnectCallback (line 241) | int redisAsyncSetDisconnectCallback(redisAsyncContext *ac, redisDisconne...
  function __redisPushCallback (line 250) | static int __redisPushCallback(redisCallbackList *list, redisCallback *s...
  function __redisShiftCallback (line 272) | static int __redisShiftCallback(redisCallbackList *list, redisCallback *...
  function __redisRunCallback (line 288) | static void __redisRunCallback(redisAsyncContext *ac, redisCallback *cb,...
  function __redisRunPushCallback (line 297) | static void __redisRunPushCallback(redisAsyncContext *ac, redisReply *re...
  function __redisAsyncFree (line 306) | static void __redisAsyncFree(redisAsyncContext *ac) {
  function redisAsyncFree (line 362) | void redisAsyncFree(redisAsyncContext *ac) {
  function __redisAsyncDisconnect (line 370) | void __redisAsyncDisconnect(redisAsyncContext *ac) {
  function redisAsyncDisconnect (line 403) | void redisAsyncDisconnect(redisAsyncContext *ac) {
  function __redisGetSubscribeCallback (line 413) | static int __redisGetSubscribeCallback(redisAsyncContext *ac, redisReply...
  function redisIsSubscribeReply (line 482) | static int redisIsSubscribeReply(redisReply *reply) {
  function redisProcessCallbacks (line 503) | void redisProcessCallbacks(redisAsyncContext *ac) {
  function __redisAsyncHandleConnectFailure (line 595) | static void __redisAsyncHandleConnectFailure(redisAsyncContext *ac) {
  function __redisAsyncHandleConnect (line 603) | static int __redisAsyncHandleConnect(redisAsyncContext *ac) {
  function redisAsyncRead (line 629) | void redisAsyncRead(redisAsyncContext *ac) {
  function redisAsyncHandleRead (line 644) | void redisAsyncHandleRead(redisAsyncContext *ac) {
  function redisAsyncWrite (line 659) | void redisAsyncWrite(redisAsyncContext *ac) {
  function redisAsyncHandleWrite (line 677) | void redisAsyncHandleWrite(redisAsyncContext *ac) {
  function redisAsyncHandleTimeout (line 692) | void redisAsyncHandleTimeout(redisAsyncContext *ac) {
  function __redisAsyncCommand (line 748) | static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *f...
  function redisvAsyncCommand (line 839) | int redisvAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void ...
  function redisAsyncCommand (line 854) | int redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void *...
  function redisAsyncCommandArgv (line 863) | int redisAsyncCommandArgv(redisAsyncContext *ac, redisCallbackFn *fn, vo...
  function redisAsyncFormattedCommand (line 875) | int redisAsyncFormattedCommand(redisAsyncContext *ac, redisCallbackFn *f...
  function redisAsyncPushFn (line 880) | redisAsyncPushFn *redisAsyncSetPushCallback(redisAsyncContext *ac, redis...
  function redisAsyncSetTimeout (line 886) | int redisAsyncSetTimeout(redisAsyncContext *ac, struct timeval tv) {

FILE: core/src/lib/3rd/hiredis/async.h
  type redisAsyncContext (line 40) | struct redisAsyncContext
  type dict (line 41) | struct dict
  type redisAsyncContext (line 44) | struct redisAsyncContext
  type redisCallback (line 45) | typedef struct redisCallback {
  type redisCallbackList (line 53) | typedef struct redisCallbackList {
  type redisAsyncContext (line 58) | struct redisAsyncContext
  type redisAsyncContext (line 59) | struct redisAsyncContext
  type redisAsyncContext (line 63) | typedef struct redisAsyncContext {
  type timeval (line 125) | struct timeval

FILE: core/src/lib/3rd/hiredis/async_private.h
  function refreshTimeout (line 56) | static inline void refreshTimeout(redisAsyncContext *ctx) {

FILE: core/src/lib/3rd/hiredis/dict.c
  function dictGenHashFunction (line 54) | static unsigned int dictGenHashFunction(const unsigned char *buf, int le...
  function _dictReset (line 66) | static void _dictReset(dict *ht) {
  function dict (line 74) | static dict *dictCreate(dictType *type, void *privDataPtr) {
  function _dictInit (line 84) | static int _dictInit(dict *ht, dictType *type, void *privDataPtr) {
  function dictExpand (line 92) | static int dictExpand(dict *ht, unsigned long size) {
  function dictAdd (line 141) | static int dictAdd(dict *ht, void *key, void *val) {
  function dictReplace (line 169) | static int dictReplace(dict *ht, void *key, void *val) {
  function dictDelete (line 194) | static int dictDelete(dict *ht, const void *key) {
  function _dictClear (line 225) | static int _dictClear(dict *ht) {
  function dictRelease (line 250) | static void dictRelease(dict *ht) {
  function dictEntry (line 255) | static dictEntry *dictFind(dict *ht, const void *key) {
  function dictInitIterator (line 270) | static void dictInitIterator(dictIterator *iter, dict *ht) {
  function dictEntry (line 277) | static dictEntry *dictNext(dictIterator *iter) {
  function _dictExpandIfNeeded (line 300) | static int _dictExpandIfNeeded(dict *ht) {
  function _dictNextPower (line 311) | static unsigned long _dictNextPower(unsigned long size) {
  function _dictKeyIndex (line 325) | static int _dictKeyIndex(dict *ht, const void *key) {

FILE: core/src/lib/3rd/hiredis/dict.h
  type dictEntry (line 45) | typedef struct dictEntry {
  type dictType (line 51) | typedef struct dictType {
  type dict (line 60) | typedef struct dict {
  type dictIterator (line 69) | typedef struct dictIterator {

FILE: core/src/lib/3rd/hiredis/examples/example-ae.c
  function getCallback (line 13) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
  function connectCallback (line 22) | void connectCallback(const redisAsyncContext *c, int status) {
  function disconnectCallback (line 32) | void disconnectCallback(const redisAsyncContext *c, int status) {
  function main (line 43) | int main (int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/examples/example-glib.c
  function connect_cb (line 9) | static void
  function disconnect_cb (line 21) | static void
  function command_cb (line 33) | static void
  function gint (line 47) | gint

FILE: core/src/lib/3rd/hiredis/examples/example-ivykis.c
  function getCallback (line 10) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
  function connectCallback (line 19) | void connectCallback(const redisAsyncContext *c, int status) {
  function disconnectCallback (line 27) | void disconnectCallback(const redisAsyncContext *c, int status) {
  function main (line 35) | int main (int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/examples/example-libev.c
  function getCallback (line 10) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
  function connectCallback (line 19) | void connectCallback(const redisAsyncContext *c, int status) {
  function disconnectCallback (line 27) | void disconnectCallback(const redisAsyncContext *c, int status) {
  function main (line 35) | int main (int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/examples/example-libevent-ssl.c
  function getCallback (line 11) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
  function connectCallback (line 20) | void connectCallback(const redisAsyncContext *c, int status) {
  function disconnectCallback (line 28) | void disconnectCallback(const redisAsyncContext *c, int status) {
  function main (line 36) | int main (int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/examples/example-libevent.c
  function getCallback (line 10) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
  function connectCallback (line 24) | void connectCallback(const redisAsyncContext *c, int status) {
  function disconnectCallback (line 32) | void disconnectCallback(const redisAsyncContext *c, int status) {
  function main (line 40) | int main (int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/examples/example-libuv.c
  function getCallback (line 10) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
  function connectCallback (line 19) | void connectCallback(const redisAsyncContext *c, int status) {
  function disconnectCallback (line 27) | void disconnectCallback(const redisAsyncContext *c, int status) {
  function main (line 35) | int main (int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/examples/example-macosx.c
  function getCallback (line 12) | void getCallback(redisAsyncContext *c, void *r, void *privdata) {
  function connectCallback (line 21) | void connectCallback(const redisAsyncContext *c, int status) {
  function disconnectCallback (line 29) | void disconnectCallback(const redisAsyncContext *c, int status) {
  function main (line 38) | int main (int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/examples/example-push.c
  function assertReplyAndFree (line 43) | static void assertReplyAndFree(redisContext *context, redisReply *reply,...
  function enableClientTracking (line 58) | static void enableClientTracking(redisContext *c) {
  function pushReplyHandler (line 78) | void pushReplyHandler(void *privdata, void *r) {
  function privdata_dtor (line 101) | void privdata_dtor(void *privdata) {
  function main (line 106) | int main(int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/examples/example-qt.cpp
  function getCallback (line 9) | void getCallback(redisAsyncContext *, void * r, void * privdata) {
  function main (line 36) | int main (int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/examples/example-qt.h
  function class (line 6) | class ExampleQt : public QObject {

FILE: core/src/lib/3rd/hiredis/examples/example-ssl.c
  function main (line 12) | int main(int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/examples/example.c
  function main (line 10) | int main(int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/fuzzing/format_command_fuzzer.c
  function LLVMFuzzerTestOneInput (line 38) | int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {

FILE: core/src/lib/3rd/hiredis/hiredis.c
  type timeval (line 47) | struct timeval
  type timeval (line 48) | struct timeval
  function redisReply (line 79) | static redisReply *createReplyObject(int type) {
  function freeReplyObject (line 90) | void freeReplyObject(void *reply) {
  function countDigits (line 295) | static uint32_t countDigits(uint64_t v) {
  function bulklen (line 308) | static size_t bulklen(size_t len) {
  function redisvFormatCommand (line 312) | int redisvFormatCommand(char **target, const char *format, va_list ap) {
  function redisFormatCommand (line 554) | int redisFormatCommand(char **target, const char *format, ...) {
  function redisFormatSdsCommandArgv (line 575) | int redisFormatSdsCommandArgv(sds *target, int argc, const char **argv,
  function redisFreeSdsCommand (line 623) | void redisFreeSdsCommand(sds cmd) {
  function redisFormatCommandArgv (line 632) | int redisFormatCommandArgv(char **target, int argc, const char **argv, c...
  function redisFreeCommand (line 670) | void redisFreeCommand(char *cmd) {
  function __redisSetError (line 674) | void __redisSetError(redisContext *c, int type, const char *str) {
  function redisReader (line 690) | redisReader *redisReaderCreate(void) {
  function redisPushAutoFree (line 694) | static void redisPushAutoFree(void *privdata, void *reply) {
  function redisContext (line 699) | static redisContext *redisContextInit(void) {
  function redisFree (line 720) | void redisFree(redisContext *c) {
  function redisFD (line 744) | redisFD redisFreeKeepFd(redisContext *c) {
  function redisReconnect (line 751) | int redisReconnect(redisContext *c) {
  function redisContext (line 793) | redisContext *redisConnectWithOptions(const redisOptions *options) {
  function redisContext (line 852) | redisContext *redisConnect(const char *ip, int port) {
  function redisContext (line 858) | redisContext *redisConnectWithTimeout(const char *ip, int port, const st...
  function redisContext (line 865) | redisContext *redisConnectNonBlock(const char *ip, int port) {
  function redisContext (line 872) | redisContext *redisConnectBindNonBlock(const char *ip, int port,
  function redisContext (line 881) | redisContext *redisConnectBindNonBlockWithReuse(const char *ip, int port,
  function redisContext (line 890) | redisContext *redisConnectUnix(const char *path) {
  function redisContext (line 896) | redisContext *redisConnectUnixWithTimeout(const char *path, const struct...
  function redisContext (line 903) | redisContext *redisConnectUnixNonBlock(const char *path) {
  function redisContext (line 910) | redisContext *redisConnectFd(redisFD fd) {
  function redisSetTimeout (line 918) | int redisSetTimeout(redisContext *c, const struct timeval tv) {
  function redisEnableKeepAlive (line 925) | int redisEnableKeepAlive(redisContext *c) {
  function redisPushFn (line 932) | redisPushFn *redisSetPushCallback(redisContext *c, redisPushFn *fn) {
  function redisBufferRead (line 943) | int redisBufferRead(redisContext *c) {
  function redisBufferWrite (line 971) | int redisBufferWrite(redisContext *c, int *done) {
  function redisHandledPushReply (line 1003) | static int redisHandledPushReply(redisContext *c, void *reply) {
  function redisGetReplyFromReader (line 1013) | int redisGetReplyFromReader(redisContext *c, void **reply) {
  function redisNextInBandReplyFromReader (line 1025) | static int redisNextInBandReplyFromReader(redisContext *c, void **reply) {
  function redisGetReply (line 1034) | int redisGetReply(redisContext *c, void **reply) {
  function __redisAppendCommand (line 1077) | int __redisAppendCommand(redisContext *c, const char *cmd, size_t len) {
  function redisAppendFormattedCommand (line 1090) | int redisAppendFormattedCommand(redisContext *c, const char *cmd, size_t...
  function redisvAppendCommand (line 1099) | int redisvAppendCommand(redisContext *c, const char *format, va_list ap) {
  function redisAppendCommand (line 1121) | int redisAppendCommand(redisContext *c, const char *format, ...) {
  function redisAppendCommandArgv (line 1131) | int redisAppendCommandArgv(redisContext *c, int argc, const char **argv,...

FILE: core/src/lib/3rd/hiredis/hiredis.h
  type timeval (line 41) | struct timeval
  type redisAsyncContext (line 99) | struct redisAsyncContext
  type redisContext (line 100) | struct redisContext
  type redisAsyncContext (line 105) | struct redisAsyncContext
  type redisReply (line 112) | typedef struct redisReply {
  type redisConnectionType (line 139) | enum redisConnectionType {
  type redisSsl (line 145) | struct redisSsl
  type redisFD (line 169) | typedef int redisFD;
  type redisFD (line 173) | typedef unsigned long long redisFD;
  type redisFD (line 175) | typedef unsigned long redisFD;
  type redisOptions (line 180) | typedef struct {
  type redisContextFuncs (line 233) | typedef struct redisContextFuncs {
  type redisContext (line 242) | typedef struct redisContext {
  type timeval (line 285) | struct timeval
  type timeval (line 292) | struct timeval
  type timeval (line 308) | struct timeval

FILE: core/src/lib/3rd/hiredis/hiredis_ssl.h
  type ssl_st (line 42) | struct ssl_st
  type redisSSLContext (line 47) | typedef struct redisSSLContext redisSSLContext;
  type redisSSLContextError (line 53) | typedef enum {
  type ssl_st (line 123) | struct ssl_st

FILE: core/src/lib/3rd/hiredis/net.c
  function redisNetClose (line 53) | void redisNetClose(redisContext *c) {
  function redisNetRead (line 60) | ssize_t redisNetRead(redisContext *c, char *buf, size_t bufcap) {
  function redisNetWrite (line 82) | ssize_t redisNetWrite(redisContext *c) {
  function __redisSetErrorFromErrno (line 95) | static void __redisSetErrorFromErrno(redisContext *c, int type, const ch...
  function redisSetReuseAddr (line 106) | static int redisSetReuseAddr(redisContext *c) {
  function redisCreateSocket (line 116) | static int redisCreateSocket(redisContext *c, int type) {
  function redisSetBlocking (line 131) | static int redisSetBlocking(redisContext *c, int blocking) {
  function redisKeepAlive (line 165) | int redisKeepAlive(redisContext *c, int interval) {
  function redisSetTcpNoDelay (line 206) | int redisSetTcpNoDelay(redisContext *c) {
  function redisContextTimeoutMsec (line 218) | static int redisContextTimeoutMsec(redisContext *c, long *result)
  function redisContextWaitReady (line 241) | static int redisContextWaitReady(redisContext *c, long msec) {
  function redisCheckConnectDone (line 274) | int redisCheckConnectDone(redisContext *c, int *completed) {
  function redisCheckSocketError (line 294) | int redisCheckSocketError(redisContext *c) {
  function redisContextSetTimeout (line 316) | int redisContextSetTimeout(redisContext *c, const struct timeval tv) {
  function redisContextUpdateConnectTimeout (line 331) | int redisContextUpdateConnectTimeout(redisContext *c, const struct timev...
  function redisContextUpdateCommandTimeout (line 347) | int redisContextUpdateCommandTimeout(redisContext *c, const struct timev...
  function _redisContextConnectTcp (line 363) | static int _redisContextConnectTcp(redisContext *c, const char *addr, in...
  function redisContextConnectTcp (line 536) | int redisContextConnectTcp(redisContext *c, const char *addr, int port,
  function redisContextConnectBindTcp (line 541) | int redisContextConnectBindTcp(redisContext *c, const char *addr, int port,
  function redisContextConnectUnix (line 547) | int redisContextConnectUnix(redisContext *c, const char *path, const str...

FILE: core/src/lib/3rd/hiredis/net.h
  type timeval (line 45) | struct timeval
  type timeval (line 46) | struct timeval
  type timeval (line 48) | struct timeval
  type timeval (line 50) | struct timeval

FILE: core/src/lib/3rd/hiredis/read.c
  function __redisReaderSetError (line 53) | static void __redisReaderSetError(redisReader *r, int type, const char *...
  function chrtos (line 77) | static size_t chrtos(char *buf, size_t size, char byte) {
  function __redisReaderSetErrorProtocolByte (line 101) | static void __redisReaderSetErrorProtocolByte(redisReader *r, char byte) {
  function __redisReaderSetErrorOOM (line 110) | static void __redisReaderSetErrorOOM(redisReader *r) {
  function string2ll (line 162) | static int string2ll(const char *s, size_t slen, long long *value) {
  function moveToNextTask (line 240) | static void moveToNextTask(redisReader *r) {
  function processLineItem (line 268) | static int processLineItem(redisReader *r) {
  function processBulkItem (line 394) | static int processBulkItem(redisReader *r) {
  function redisReaderGrow (line 466) | static int redisReaderGrow(redisReader *r) {
  function processAggregateItem (line 492) | static int processAggregateItem(redisReader *r) {
  function processItem (line 570) | static int processItem(redisReader *r) {
  function redisReader (line 651) | redisReader *redisReaderCreateWithFunctions(redisReplyObjectFunctions *f...
  function redisReaderFree (line 683) | void redisReaderFree(redisReader *r) {
  function redisReaderFeed (line 703) | int redisReaderFeed(redisReader *r, const char *buf, size_t len) {
  function redisReaderGetReply (line 734) | int redisReaderGetReply(redisReader *r, void **reply) {

FILE: core/src/lib/3rd/hiredis/read.h
  type redisReadTask (line 76) | typedef struct redisReadTask {
  type redisReplyObjectFunctions (line 85) | typedef struct redisReplyObjectFunctions {
  type redisReader (line 95) | typedef struct redisReader {

FILE: core/src/lib/3rd/hiredis/sds.c
  function sdsHdrSize (line 43) | static inline int sdsHdrSize(char type) {
  function sdsReqType (line 59) | static inline char sdsReqType(size_t string_size) {
  function sds (line 83) | sds sdsnewlen(const void *init, size_t initlen) {
  function sds (line 141) | sds sdsempty(void) {
  function sds (line 146) | sds sdsnew(const char *init) {
  function sds (line 152) | sds sdsdup(const sds s) {
  function sdsfree (line 157) | void sdsfree(sds s) {
  function sdsupdatelen (line 176) | void sdsupdatelen(sds s) {
  function sdsclear (line 185) | void sdsclear(sds s) {
  function sds (line 196) | sds sdsMakeRoomFor(sds s, size_t addlen) {
  function sds (line 247) | sds sdsRemoveFreeSpace(sds s) {
  function sdsAllocSize (line 280) | size_t sdsAllocSize(sds s) {
  function sdsIncrLen (line 314) | void sdsIncrLen(sds s, int incr) {
  function sds (line 360) | sds sdsgrowzero(sds s, size_t len) {
  function sds (line 378) | sds sdscatlen(sds s, const void *t, size_t len) {
  function sds (line 393) | sds sdscat(sds s, const char *t) {
  function sds (line 401) | sds sdscatsds(sds s, const sds t) {
  function sds (line 407) | sds sdscpylen(sds s, const char *t, size_t len) {
  function sds (line 420) | sds sdscpy(sds s, const char *t) {
  function sdsll2str (line 431) | int sdsll2str(char *s, long long value) {
  function sdsull2str (line 463) | int sdsull2str(char *s, unsigned long long v) {
  function sds (line 495) | sds sdsfromlonglong(long long value) {
  function sds (line 503) | sds sdscatvprintf(sds s, const char *fmt, va_list ap) {
  function sds (line 556) | sds sdscatprintf(sds s, const char *fmt, ...) {
  function sds (line 581) | sds sdscatfmt(sds s, char const *fmt, ...) {
  function sds (line 691) | sds sdstrim(sds s, const char *cset) {
  function sdsrange (line 726) | int sdsrange(sds s, ssize_t start, ssize_t end) {
  function sdstolower (line 757) | void sdstolower(sds s) {
  function sdstoupper (line 764) | void sdstoupper(sds s) {
  function sdscmp (line 781) | int sdscmp(const sds s1, const sds s2) {
  function sds (line 809) | sds *sdssplitlen(const char *s, int len, const char *sep, int seplen, in...
  function sdsfreesplitres (line 859) | void sdsfreesplitres(sds *tokens, int count) {
  function sds (line 872) | sds sdscatrepr(sds s, const char *p, size_t len) {
  function hex_digit_to_int (line 899) | int hex_digit_to_int(char c) {
  function sds (line 940) | sds *sdssplitargs(const char *line, int *argc) {
  function sds (line 1067) | sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen) {
  function sds (line 1083) | sds sdsjoin(char **argv, int argc, char *sep) {
  function sds (line 1095) | sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen) {
  function sds_free (line 1113) | void sds_free(void *ptr) { s_free(ptr); }
  function sdsTest (line 1121) | int sdsTest(void) {
  function main (line 1286) | int main(void) {

FILE: core/src/lib/3rd/hiredis/sds.h
  type sdshdr5 (line 54) | struct __attribute__ ((__packed__)) sdshdr5 {
  type sdshdr8 (line 58) | struct __attribute__ ((__packed__)) sdshdr8 {
  type sdshdr16 (line 64) | struct __attribute__ ((__packed__)) sdshdr16 {
  type sdshdr32 (line 70) | struct __attribute__ ((__packed__)) sdshdr32 {
  type sdshdr64 (line 76) | struct __attribute__ ((__packed__)) sdshdr64 {
  function sdslen (line 94) | static inline size_t sdslen(const sds s) {
  function sdsavail (line 111) | static inline size_t sdsavail(const sds s) {
  function sdssetlen (line 137) | static inline void sdssetlen(sds s, size_t newlen) {
  function sdsinclen (line 161) | static inline void sdsinclen(sds s, size_t inc) {
  function sdsalloc (line 187) | static inline size_t sdsalloc(const sds s) {
  function sdssetalloc (line 204) | static inline void sdssetalloc(sds s, size_t newlen) {

FILE: core/src/lib/3rd/hiredis/sockcompat.c
  function _wsaErrorToErrno (line 35) | static int _wsaErrorToErrno(int err) {
  function _updateErrno (line 97) | static void _updateErrno(int success) {
  function _initWinsock (line 101) | static int _initWinsock() {
  function win32_getaddrinfo (line 115) | int win32_getaddrinfo(const char *node, const char *service, const struc...
  function win32_freeaddrinfo (line 149) | void win32_freeaddrinfo(struct addrinfo *res) {
  function SOCKET (line 153) | SOCKET win32_socket(int domain, int type, int protocol) {
  function win32_ioctl (line 165) | int win32_ioctl(SOCKET fd, unsigned long request, unsigned long *argp) {
  function win32_bind (line 171) | int win32_bind(SOCKET sockfd, const struct sockaddr *addr, socklen_t add...
  function win32_connect (line 177) | int win32_connect(SOCKET sockfd, const struct sockaddr *addr, socklen_t ...
  function win32_getsockopt (line 191) | int win32_getsockopt(SOCKET sockfd, int level, int optname, void *optval...
  function win32_setsockopt (line 212) | int win32_setsockopt(SOCKET sockfd, int level, int optname, const void *...
  function win32_close (line 225) | int win32_close(SOCKET fd) {
  function win32_recv (line 231) | ssize_t win32_recv(SOCKET sockfd, void *buf, size_t len, int flags) {
  function win32_send (line 237) | ssize_t win32_send(SOCKET sockfd, const void *buf, size_t len, int flags) {
  function win32_poll (line 243) | int win32_poll(struct pollfd *fds, nfds_t nfds, int timeout) {

FILE: core/src/lib/3rd/hiredis/sockcompat.h
  type addrinfo (line 59) | struct addrinfo
  type addrinfo (line 59) | struct addrinfo
  type addrinfo (line 61) | struct addrinfo
  type sockaddr (line 64) | struct sockaddr
  type sockaddr (line 65) | struct sockaddr
  type ULONG (line 71) | typedef ULONG nfds_t;
  type pollfd (line 72) | struct pollfd

FILE: core/src/lib/3rd/hiredis/ssl.c
  type redisSSLContext (line 55) | struct redisSSLContext {
  type redisSSL (line 64) | typedef struct redisSSL {
  type CRITICAL_SECTION (line 100) | typedef CRITICAL_SECTION sslLockType;
  function sslLockInit (line 101) | static void sslLockInit(sslLockType* l) {
  function sslLockAcquire (line 104) | static void sslLockAcquire(sslLockType* l) {
  function sslLockRelease (line 107) | static void sslLockRelease(sslLockType* l) {
  type pthread_mutex_t (line 111) | typedef pthread_mutex_t sslLockType;
  function sslLockInit (line 112) | static void sslLockInit(sslLockType *l) {
  function sslLockAcquire (line 115) | static void sslLockAcquire(sslLockType *l) {
  function sslLockRelease (line 118) | static void sslLockRelease(sslLockType *l) {
  function opensslDoLock (line 125) | static void opensslDoLock(int mode, int lkid, const char *f, int line) {
  function initOpensslLocks (line 138) | static int initOpensslLocks(void) {
  function redisInitOpenSSL (line 157) | int redisInitOpenSSL(void)
  function redisFreeSSLContext (line 195) | void redisFreeSSLContext(redisSSLContext *ctx)
  function redisSSLContext (line 218) | redisSSLContext *redisCreateSSLContext(const char *cacert_filename, cons...
  function redisSSLConnect (line 308) | static int redisSSLConnect(redisContext *c, SSL *ssl) {
  function redisInitiateSSL (line 362) | int redisInitiateSSL(redisContext *c, SSL *ssl) {
  function redisInitiateSSLWithContext (line 371) | int redisInitiateSSLWithContext(redisContext *c, redisSSLContext *redis_...
  function maybeCheckWant (line 407) | static int maybeCheckWant(redisSSL *rssl, int rv) {
  function redisSSLFree (line 427) | static void redisSSLFree(void *privctx){
  function redisSSLRead (line 438) | static ssize_t redisSSLRead(redisContext *c, char *buf, size_t bufcap) {
  function redisSSLWrite (line 480) | static ssize_t redisSSLWrite(redisContext *c) {
  function redisSSLAsyncRead (line 502) | static void redisSSLAsyncRead(redisAsyncContext *ac) {
  function redisSSLAsyncWrite (line 532) | static void redisSSLAsyncWrite(redisAsyncContext *ac) {

FILE: core/src/lib/3rd/hiredis/test.c
  type connection_type (line 24) | enum connection_type {
  type config (line 31) | struct config {
  type privdata (line 53) | struct privdata {
  type pushCounters (line 57) | struct pushCounters {
  function usec (line 74) | static long long usec(void) {
  function get_redis_version (line 95) | void get_redis_version(redisContext *c, int *majorptr, int *minorptr) {
  function redisContext (line 130) | static redisContext *select_database(redisContext *c) {
  function send_hello (line 153) | static void send_hello(redisContext *c, int version) {
  function send_client_tracking (line 164) | static void send_client_tracking(redisContext *c, const char *str) {
  function disconnect (line 172) | static int disconnect(redisContext *c, int keep_fd) {
  function do_ssl_handshake (line 190) | static void do_ssl_handshake(redisContext *c) {
  function redisContext (line 203) | static redisContext *do_connect(struct config config) {
  function do_reconnect (line 240) | static void do_reconnect(redisContext *c, struct config config) {
  function test_format_commands (line 248) | static void test_format_commands(void) {
  function test_append_formatted_commands (line 368) | static void test_append_formatted_commands(struct config config) {
  function test_reply_reader (line 390) | static void test_reply_reader(void) {
  function test_free_null (line 746) | static void test_free_null(void) {
  function test_allocator_injection (line 783) | static void test_allocator_injection(void) {
  function test_blocking_connection_errors (line 817) | static void test_blocking_connection_errors(void) {
  function push_handler (line 860) | void push_handler(void *privdata, void *r) {
  function push_handler_async (line 881) | void push_handler_async(redisAsyncContext *ac, void *reply) {
  function test_resp3_push_handler (line 886) | static void test_resp3_push_handler(redisContext *c) {
  function redisOptions (line 946) | redisOptions get_redis_tcp_options(struct config config) {
  function test_resp3_push_options (line 952) | static void test_resp3_push_options(struct config config) {
  function free_privdata (line 991) | void free_privdata(void *privdata) {
  function test_privdata_hooks (line 996) | static void test_privdata_hooks(struct config config) {
  function test_blocking_connection (line 1012) | static void test_blocking_connection(struct config config) {
  function detect_debug_sleep (line 1103) | static int detect_debug_sleep(redisContext *c) {
  function test_blocking_connection_timeouts (line 1119) | static void test_blocking_connection_timeouts(struct config config) {
  function test_blocking_io_errors (line 1176) | static void test_blocking_io_errors(struct config config) {
  function test_invalid_timeout_errors (line 1222) | static void test_invalid_timeout_errors(struct config config) {
  function test_throughput (line 1258) | static void test_throughput(struct config config) {
  function main (line 1446) | int main(int argc, char **argv) {

FILE: core/src/lib/3rd/hiredis/win32.h
  function c99_vsnprintf (line 26) | __inline int c99_vsnprintf(char* str, size_t size, const char* format, v...
  function c99_snprintf (line 38) | __inline int c99_snprintf(char* str, size_t size, const char* format, ...)

FILE: core/src/lib/3rd/libuv/docs/code/cgi/main.c
  function cleanup_handles (line 11) | void cleanup_handles(uv_process_t *req, int64_t exit_status, int term_si...
  function invoke_cgi_script (line 17) | void invoke_cgi_script(uv_tcp_t *client) {
  function on_new_connection (line 50) | void on_new_connection(uv_stream_t *server, int status) {
  function main (line 66) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/cgi/tick.c
  function main (line 4) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/detach/main.c
  function main (line 9) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/dns/main.c
  function alloc_buffer (line 8) | void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *...
  function on_read (line 13) | void on_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
  function on_connect (line 32) | void on_connect(uv_connect_t *req, int status) {
  function on_resolved (line 43) | void on_resolved(uv_getaddrinfo_t *resolver, int status, struct addrinfo...
  function main (line 62) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/helloworld/main.c
  function main (line 5) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/idle-basic/main.c
  function wait_for_a_while (line 6) | void wait_for_a_while(uv_idle_t* handle) {
  function main (line 13) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/idle-compute/main.c
  function crunch_away (line 10) | void crunch_away(uv_idle_t* handle) {
  function on_type (line 20) | void on_type(uv_fs_t *req) {
  function main (line 34) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/interfaces/main.c
  function main (line 4) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/locks/main.c
  function reader (line 8) | void reader(void *n)
  function writer (line 22) | void writer(void *n)
  function main (line 37) | int main()

FILE: core/src/lib/3rd/libuv/docs/code/multi-echo-server/main.c
  type child_worker (line 9) | struct child_worker {
  function close_process_handle (line 21) | void close_process_handle(uv_process_t *req, int64_t exit_status, int te...
  function alloc_buffer (line 26) | void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *...
  function on_new_connection (line 31) | void on_new_connection(uv_stream_t *server, int status) {
  function setup_workers (line 51) | void setup_workers() {
  function main (line 97) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/multi-echo-server/worker.c
  type write_req_t (line 11) | typedef struct {
  function free_write_req (line 16) | void free_write_req(uv_write_t *req) {
  function alloc_buffer (line 22) | void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *...
  function echo_write (line 27) | void echo_write(uv_write_t *req, int status) {
  function echo_read (line 34) | void echo_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
  function on_new_connection (line 51) | void on_new_connection(uv_stream_t *q, ssize_t nread, const uv_buf_t *bu...
  function main (line 81) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/onchange/main.c
  function run_command (line 9) | void run_command(uv_fs_event_t *handle, const char *filename, int events...
  function main (line 26) | int main(int argc, char **argv) {

FILE: core/src/lib/3rd/libuv/docs/code/pipe-echo-server/main.c
  type write_req_t (line 14) | typedef struct {
  function free_write_req (line 19) | void free_write_req(uv_write_t *req) {
  function alloc_buffer (line 25) | void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *...
  function echo_write (line 30) | void echo_write(uv_write_t *req, int status) {
  function echo_read (line 37) | void echo_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
  function on_new_connection (line 54) | void on_new_connection(uv_stream_t *server, int status) {
  function remove_sock (line 70) | void remove_sock(int sig) {
  function main (line 76) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/plugin/hello.c
  function initialize (line 3) | void initialize() {

FILE: core/src/lib/3rd/libuv/docs/code/plugin/main.c
  function mfp_register (line 11) | void mfp_register(const char *name) {
  function main (line 15) | int main(int argc, char **argv) {

FILE: core/src/lib/3rd/libuv/docs/code/proc-streams/main.c
  function on_exit (line 11) | void on_exit(uv_process_t *req, int64_t exit_status, int term_signal) {
  function main (line 16) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/proc-streams/test.c
  function main (line 3) | int main()

FILE: core/src/lib/3rd/libuv/docs/code/progress/main.c
  function fake_download (line 12) | void fake_download(uv_work_t *req) {
  function after (line 26) | void after(uv_work_t *req, int status) {
  function print_progress (line 31) | void print_progress(uv_async_t *handle) {
  function main (line 36) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/queue-cancel/main.c
  function fib_ (line 11) | long fib_(long t) {
  function fib (line 18) | void fib(uv_work_t *req) {
  function after_fib (line 28) | void after_fib(uv_work_t *req, int status) {
  function signal_handler (line 33) | void signal_handler(uv_signal_t *req, int signum)
  function main (line 43) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/queue-work/main.c
  function fib_ (line 10) | long fib_(long t) {
  function fib (line 17) | void fib(uv_work_t *req) {
  function after_fib (line 27) | void after_fib(uv_work_t *req, int status) {
  function main (line 31) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/ref-timer/main.c
  function gc (line 9) | void gc(uv_timer_t *handle) {
  function fake_job (line 13) | void fake_job(uv_timer_t *handle) {
  function main (line 17) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/signal/main.c
  function uv_loop_t (line 6) | uv_loop_t* create_loop()
  function signal_handler (line 15) | void signal_handler(uv_signal_t *handle, int signum)
  function thread1_worker (line 22) | void thread1_worker(void *userp)
  function thread2_worker (line 37) | void thread2_worker(void *userp)
  function main (line 54) | int main()

FILE: core/src/lib/3rd/libuv/docs/code/spawn/main.c
  function on_exit (line 10) | void on_exit(uv_process_t *req, int64_t exit_status, int term_signal) {
  function main (line 15) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/tcp-echo-server/main.c
  type sockaddr_in (line 10) | struct sockaddr_in
  type write_req_t (line 12) | typedef struct {
  function free_write_req (line 17) | void free_write_req(uv_write_t *req) {
  function alloc_buffer (line 23) | void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *...
  function on_close (line 28) | void on_close(uv_handle_t* handle) {
  function echo_write (line 32) | void echo_write(uv_write_t *req, int status) {
  function echo_read (line 39) | void echo_read(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
  function on_new_connection (line 55) | void on_new_connection(uv_stream_t *server, int status) {
  function main (line 72) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/thread-create/main.c
  function hare (line 6) | void hare(void *arg) {
  function tortoise (line 16) | void tortoise(void *arg) {
  function main (line 26) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/tty-gravity/main.c
  function update (line 14) | void update(uv_timer_t *req) {
  function main (line 32) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/tty/main.c
  function main (line 8) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/udp-dhcp/main.c
  function alloc_buffer (line 12) | void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *...
  function on_read (line 17) | void on_read(uv_udp_t *req, ssize_t nread, const uv_buf_t *buf, const st...
  function uv_buf_t (line 42) | uv_buf_t make_discover_msg() {
  function on_send (line 97) | void on_send(uv_udp_send_t *req, int status) {
  function main (line 104) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/uvcat/main.c
  function on_write (line 17) | void on_write(uv_fs_t *req) {
  function on_read (line 26) | void on_read(uv_fs_t *req) {
  function on_open (line 41) | void on_open(uv_fs_t *req) {
  function main (line 55) | int main(int argc, char **argv) {

FILE: core/src/lib/3rd/libuv/docs/code/uvstop/main.c
  function idle_cb (line 6) | void idle_cb(uv_idle_t *handle) {
  function prep_cb (line 16) | void prep_cb(uv_prepare_t *handle) {
  function main (line 20) | int main() {

FILE: core/src/lib/3rd/libuv/docs/code/uvtee/main.c
  type write_req_t (line 9) | typedef struct {
  function alloc_buffer (line 19) | void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *...
  function free_write_req (line 23) | void free_write_req(uv_write_t *req) {
  function on_stdout_write (line 29) | void on_stdout_write(uv_write_t *req, int status) {
  function on_file_write (line 33) | void on_file_write(uv_write_t *req, int status) {
  function write_data (line 37) | void write_data(uv_stream_t *dest, size_t size, uv_buf_t buf, uv_write_c...
  function read_stdin (line 44) | void read_stdin(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) {
  function main (line 62) | int main(int argc, char **argv) {

FILE: core/src/lib/3rd/libuv/docs/code/uvwget/main.c
  type curl_context_t (line 11) | typedef struct curl_context_s {
  function curl_context_t (line 16) | curl_context_t *create_curl_context(curl_socket_t sockfd) {
  function curl_close_cb (line 30) | void curl_close_cb(uv_handle_t *handle) {
  function destroy_curl_context (line 35) | void destroy_curl_context(curl_context_t *context) {
  function add_download (line 40) | void add_download(const char *url, int num) {
  function check_multi_info (line 58) | void check_multi_info(void) {
  function curl_perform (line 81) | void curl_perform(uv_poll_t *req, int status, int events) {
  function on_timeout (line 97) | void on_timeout(uv_timer_t *req) {
  function start_timeout (line 103) | void start_timeout(CURLM *multi, long timeout_ms, void *userp) {
  function handle_socket (line 109) | int handle_socket(CURL *easy, curl_socket_t s, int action, void *userp, ...
  function main (line 142) | int main(int argc, char **argv) {

FILE: core/src/lib/3rd/libuv/docs/src/conf.py
  function get_libuv_version (line 20) | def get_libuv_version():

FILE: core/src/lib/3rd/libuv/docs/src/sphinx-plugins/manpage.py
  function make_link_node (line 18) | def make_link_node(rawtext, app, name, manpage_num, options):
  function man_role (line 30) | def man_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
  function setup (line 41) | def setup(app):

FILE: core/src/lib/3rd/libuv/include/uv.h
  type uv_errno_t (line 182) | typedef enum {
  type uv_handle_type (line 189) | typedef enum {
  type uv_req_type (line 198) | typedef enum {
  type uv_loop_t (line 209) | typedef struct uv_loop_s uv_loop_t;
  type uv_handle_t (line 210) | typedef struct uv_handle_s uv_handle_t;
  type uv_dir_t (line 211) | typedef struct uv_dir_s uv_dir_t;
  type uv_stream_t (line 212) | typedef struct uv_stream_s uv_stream_t;
  type uv_tcp_t (line 213) | typedef struct uv_tcp_s uv_tcp_t;
  type uv_udp_t (line 214) | typedef struct uv_udp_s uv_udp_t;
  type uv_pipe_t (line 215) | typedef struct uv_pipe_s uv_pipe_t;
  type uv_tty_t (line 216) | typedef struct uv_tty_s uv_tty_t;
  type uv_poll_t (line 217) | typedef struct uv_poll_s uv_poll_t;
  type uv_timer_t (line 218) | typedef struct uv_timer_s uv_timer_t;
  type uv_prepare_t (line 219) | typedef struct uv_prepare_s uv_prepare_t;
  type uv_check_t (line 220) | typedef struct uv_check_s uv_check_t;
  type uv_idle_t (line 221) | typedef struct uv_idle_s uv_idle_t;
  type uv_async_t (line 222) | typedef struct uv_async_s uv_async_t;
  type uv_process_t (line 223) | typedef struct uv_process_s uv_process_t;
  type uv_fs_event_t (line 224) | typedef struct uv_fs_event_s uv_fs_event_t;
  type uv_fs_poll_t (line 225) | typedef struct uv_fs_poll_s uv_fs_poll_t;
  type uv_signal_t (line 226) | typedef struct uv_signal_s uv_signal_t;
  type uv_req_t (line 229) | typedef struct uv_req_s uv_req_t;
  type uv_getaddrinfo_t (line 230) | typedef struct uv_getaddrinfo_s uv_getaddrinfo_t;
  type uv_getnameinfo_t (line 231) | typedef struct uv_getnameinfo_s uv_getnameinfo_t;
  type uv_shutdown_t (line 232) | typedef struct uv_shutdown_s uv_shutdown_t;
  type uv_write_t (line 233) | typedef struct uv_write_s uv_write_t;
  type uv_connect_t (line 234) | typedef struct uv_connect_s uv_connect_t;
  type uv_udp_send_t (line 235) | typedef struct uv_udp_send_s uv_udp_send_t;
  type uv_fs_t (line 236) | typedef struct uv_fs_s uv_fs_t;
  type uv_work_t (line 237) | typedef struct uv_work_s uv_work_t;
  type uv_random_t (line 238) | typedef struct uv_random_s uv_random_t;
  type uv_env_item_t (line 241) | typedef struct uv_env_item_s uv_env_item_t;
  type uv_cpu_info_t (line 242) | typedef struct uv_cpu_info_s uv_cpu_info_t;
  type uv_interface_address_t (line 243) | typedef struct uv_interface_address_s uv_interface_address_t;
  type uv_dirent_t (line 244) | typedef struct uv_dirent_s uv_dirent_t;
  type uv_passwd_t (line 245) | typedef struct uv_passwd_s uv_passwd_t;
  type uv_utsname_t (line 246) | typedef struct uv_utsname_s uv_utsname_t;
  type uv_statfs_t (line 247) | typedef struct uv_statfs_s uv_statfs_t;
  type uv_loop_option (line 249) | typedef enum {
  type uv_run_mode (line 254) | typedef enum {
  type addrinfo (line 333) | struct addrinfo
  type uv_timespec_t (line 343) | typedef struct {
  type uv_stat_t (line 349) | typedef struct {
  type uv_membership (line 382) | typedef enum {
  type uv_tcp_flags (line 568) | enum uv_tcp_flags {
  type sockaddr (line 574) | struct sockaddr
  type sockaddr (line 577) | struct sockaddr
  type sockaddr (line 580) | struct sockaddr
  type sockaddr (line 585) | struct sockaddr
  type uv_udp_flags (line 601) | enum uv_udp_flags {
  type sockaddr (line 640) | struct sockaddr
  type uv_udp_send_s (line 660) | struct uv_udp_send_s {
  type uv_poll_event (line 805) | enum uv_poll_event {
  type uv_idle_s (line 840) | struct uv_idle_s {
  type uv_fs_event (line 1549) | enum uv_fs_event {
  type uv_fs_poll_s (line 1566) | struct uv_fs_poll_s {
  type uv_fs_event_flags (line 1605) | enum uv_fs_event_flags {
  type sockaddr_in (line 1643) | struct sockaddr_in
  type sockaddr_in6 (line 1644) | struct sockaddr_in6
  type sockaddr_in (line 1646) | struct sockaddr_in
  type sockaddr_in6 (line 1647) | struct sockaddr_in6
  type uv_random_s (line 1653) | struct uv_random_s {
  type uv_thread_options_s (line 1761) | struct uv_thread_options_s {

FILE: core/src/lib/3rd/libuv/include/uv/android-ifaddrs.h
  type ifaddrs (line 29) | struct ifaddrs {
  type ifaddrs (line 50) | struct ifaddrs
  type ifaddrs (line 51) | struct ifaddrs

FILE: core/src/lib/3rd/libuv/include/uv/stdint-msvc2008.h
  type int_least8_t (line 94) | typedef int8_t    int_least8_t;
  type int_least16_t (line 95) | typedef int16_t   int_least16_t;
  type int_least32_t (line 96) | typedef int32_t   int_least32_t;
  type int_least64_t (line 97) | typedef int64_t   int_least64_t;
  type uint_least8_t (line 98) | typedef uint8_t   uint_least8_t;
  type uint_least16_t (line 99) | typedef uint16_t  uint_least16_t;
  type uint_least32_t (line 100) | typedef uint32_t  uint_least32_t;
  type uint_least64_t (line 101) | typedef uint64_t  uint_least64_t;
  type int_fast8_t (line 104) | typedef int8_t    int_fast8_t;
  type int_fast16_t (line 105) | typedef int16_t   int_fast16_t;
  type int_fast32_t (line 106) | typedef int32_t   int_fast32_t;
  type int_fast64_t (line 107) | typedef int64_t   int_fast64_t;
  type uint_fast8_t (line 108) | typedef uint8_t   uint_fast8_t;
  type uint_fast16_t (line 109) | typedef uint16_t  uint_fast16_t;
  type uint_fast32_t (line 110) | typedef uint32_t  uint_fast32_t;
  type uint_fast64_t (line 111) | typedef uint64_t  uint_fast64_t;
  type intmax_t (line 123) | typedef int64_t   intmax_t;
  type uintmax_t (line 124) | typedef uint64_t  uintmax_t;

FILE: core/src/lib/3rd/libuv/include/uv/threadpool.h
  type uv__work (line 30) | struct uv__work {

FILE: core/src/lib/3rd/libuv/include/uv/tree.h
  type type (line 79) | struct type
  type type (line 128) | struct type
  type name (line 129) | struct name
  type type (line 129) | struct type
  type type (line 139) | struct type
  type name (line 140) | struct name
  type type (line 140) | struct type
  type type (line 153) | struct type
  type name (line 154) | struct name
  function _SPLAY_MINMAX (line 247) | void name##_SPLAY_MINMAX(struct name *head, int __comp)                 ...
  type type (line 315) | struct type
  type type (line 316) | struct type
  type name (line 599) | struct name
  type type (line 601) | struct type
  type type (line 602) | struct type
  type name (line 630) | struct name
  type type (line 632) | struct type
  type name (line 648) | struct name
  type type (line 650) | struct type
  type type (line 651) | struct type
  type type (line 669) | struct type
  type type (line 691) | struct type
  type name (line 712) | struct name
  type type (line 714) | struct type
  type type (line 715) | struct type

FILE: core/src/lib/3rd/libuv/include/uv/unix.h
  type uv__io_s (line 88) | struct uv__io_s
  type uv_loop_s (line 89) | struct uv_loop_s
  type uv_loop_s (line 91) | struct uv_loop_s
  type uv__io_s (line 92) | struct uv__io_s
  type uv__io_t (line 94) | typedef struct uv__io_s uv__io_t;
  type uv__io_s (line 96) | struct uv__io_s {
  type uv_buf_t (line 123) | typedef struct uv_buf_t {
  type uv_file (line 128) | typedef int uv_file;
  type uv_os_sock_t (line 129) | typedef int uv_os_sock_t;
  type uv_os_fd_t (line 130) | typedef int uv_os_fd_t;
  type pid_t (line 131) | typedef pid_t uv_pid_t;
  type pthread_once_t (line 135) | typedef pthread_once_t uv_once_t;
  type pthread_t (line 136) | typedef pthread_t uv_thread_t;
  type pthread_mutex_t (line 137) | typedef pthread_mutex_t uv_mutex_t;
  type pthread_rwlock_t (line 138) | typedef pthread_rwlock_t uv_rwlock_t;
  type UV_PLATFORM_SEM_T (line 139) | typedef UV_PLATFORM_SEM_T uv_sem_t;
  type pthread_cond_t (line 140) | typedef pthread_cond_t uv_cond_t;
  type pthread_key_t (line 141) | typedef pthread_key_t uv_key_t;
  type _uv_barrier (line 148) | struct _uv_barrier {
  type uv_barrier_t (line 156) | typedef struct {
  type pthread_barrier_t (line 164) | typedef pthread_barrier_t uv_barrier_t;
  type gid_t (line 168) | typedef gid_t uv_gid_t;
  type uid_t (line 169) | typedef uid_t uv_uid_t;
  type uv__dirent_t (line 171) | typedef struct dirent uv__dirent_t;
  type uv_lib_t (line 218) | typedef struct {

FILE: core/src/lib/3rd/libuv/include/uv/win.h
  type WSAPOLLFD (line 36) | typedef struct pollfd {
  type namelen (line 139) | typedef BOOL (PASCAL *LPFN_CONNECTEX)
  type PVOID (line 173) | typedef PVOID RTL_SRWLOCK;
  type RTL_SRWLOCK (line 174) | typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK;
  type sockaddr (line 192) | struct sockaddr
  type LONG (line 198) | typedef LONG NTSTATUS;
  type NTSTATUS (line 199) | typedef NTSTATUS *PNTSTATUS;
  type PVOID (line 203) | typedef PVOID CONDITION_VARIABLE, *PCONDITION_VARIABLE;
  type AFD_POLL_HANDLE_INFO (line 206) | typedef struct _AFD_POLL_HANDLE_INFO {
  type AFD_POLL_INFO (line 212) | typedef struct _AFD_POLL_INFO {
  type uv_buf_t (line 226) | typedef struct uv_buf_t {
  type uv_file (line 231) | typedef int uv_file;
  type SOCKET (line 232) | typedef SOCKET uv_os_sock_t;
  type HANDLE (line 233) | typedef HANDLE uv_os_fd_t;
  type uv_pid_t (line 234) | typedef int uv_pid_t;
  type HANDLE (line 236) | typedef HANDLE uv_thread_t;
  type HANDLE (line 238) | typedef HANDLE uv_sem_t;
  type CRITICAL_SECTION (line 240) | typedef CRITICAL_SECTION uv_mutex_t;
  type uv_cond_t (line 249) | typedef union {
  type uv_rwlock_t (line 259) | typedef union {
  type uv_barrier_t (line 276) | typedef struct {
  type uv_key_t (line 284) | typedef struct {
  type uv_once_t (line 290) | typedef struct uv_once_s {
  type uv_uid_t (line 296) | typedef unsigned char uv_uid_t;
  type uv_gid_t (line 297) | typedef unsigned char uv_gid_t;
  type uv__dirent_t (line 299) | typedef struct uv__dirent_s {
  type uv_lib_t (line 320) | typedef struct {
  type addrinfoW (line 585) | struct addrinfoW
  type addrinfo (line 586) | struct addrinfo

FILE: core/src/lib/3rd/libuv/src/fs-poll.c
  type poll_ctx (line 37) | struct poll_ctx {
  function uv_fs_poll_init (line 59) | int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle) {
  function uv_fs_poll_start (line 66) | int uv_fs_poll_start(uv_fs_poll_t* handle,
  function uv_fs_poll_stop (line 116) | int uv_fs_poll_stop(uv_fs_poll_t* handle) {
  function uv_fs_poll_getpath (line 138) | int uv_fs_poll_getpath(uv_fs_poll_t* handle, char* buffer, size_t* size) {
  function uv__fs_poll_close (line 164) | void uv__fs_poll_close(uv_fs_poll_t* handle) {
  function timer_cb (line 172) | static void timer_cb(uv_timer_t* timer) {
  function poll_cb (line 185) | static void poll_cb(uv_fs_t* req) {
  function timer_close_cb (line 234) | static void timer_close_cb(uv_handle_t* timer) {
  function statbuf_eq (line 258) | static int statbuf_eq(const uv_stat_t* a, const uv_stat_t* b) {
  function uv__fs_poll_endgame (line 281) | void uv__fs_poll_endgame(uv_loop_t* loop, uv_fs_poll_t* handle) {

FILE: core/src/lib/3rd/libuv/src/heap-inl.h
  type heap_node (line 27) | struct heap_node {
  type heap (line 40) | struct heap {
  type heap_node (line 46) | struct heap_node
  type heap_node (line 47) | struct heap_node
  type heap (line 50) | struct heap
  type heap_node (line 51) | struct heap_node
  type heap (line 51) | struct heap
  type heap (line 52) | struct heap
  type heap_node (line 53) | struct heap_node
  type heap (line 55) | struct heap
  type heap_node (line 56) | struct heap_node
  type heap (line 58) | struct heap
  type heap (line 62) | struct heap
  type heap_node (line 67) | struct heap_node
  type heap (line 67) | struct heap
  function heap_node_swap (line 72) | static void heap_node_swap(struct heap* heap,
  type heap (line 106) | struct heap
  type heap_node (line 107) | struct heap_node
  type heap_node (line 109) | struct heap_node
  type heap_node (line 110) | struct heap_node
  type heap (line 150) | struct heap
  type heap_node (line 151) | struct heap_node
  type heap_node (line 153) | struct heap_node
  type heap_node (line 154) | struct heap_node
  type heap_node (line 155) | struct heap_node
  type heap (line 239) | struct heap

FILE: core/src/lib/3rd/libuv/src/idna.c
  function uv__utf8_decode1_slow (line 25) | static unsigned uv__utf8_decode1_slow(const char** p,
  function uv__utf8_decode1 (line 91) | unsigned uv__utf8_decode1(const char** p, const char* pe) {
  function uv__idna_toascii_label (line 104) | static int uv__idna_toascii_label(const char* s, const char* se,
  function uv__idna_toascii (line 269) | long uv__idna_toascii(const char* s, const char* se, char* d, char* de) {

FILE: core/src/lib/3rd/libuv/src/inet.c
  function uv_inet_ntop (line 40) | int uv_inet_ntop(int af, const void* src, char* dst, size_t size) {
  function inet_ntop4 (line 53) | static int inet_ntop4(const unsigned char *src, char *dst, size_t size) {
  function inet_ntop6 (line 67) | static int inet_ntop6(const unsigned char *src, char *dst, size_t size) {
  function uv_inet_pton (line 150) | int uv_inet_pton(int af, const char* src, void* dst) {
  function inet_pton4 (line 179) | static int inet_pton4(const char *src, unsigned char *dst) {
  function inet_pton6 (line 218) | static int inet_pton6(const char *src, unsigned char *dst) {

FILE: core/src/lib/3rd/libuv/src/random.c
  function uv__random (line 31) | static int uv__random(void* buf, size_t buflen) {
  function uv__random_work (line 73) | static void uv__random_work(struct uv__work* w) {
  function uv__random_done (line 81) | static void uv__random_done(struct uv__work* w, int status) {
  function uv_random (line 94) | int uv_random(uv_loop_t* loop,

FILE: core/src/lib/3rd/libuv/src/strscpy.c
  function uv__strscpy (line 25) | ssize_t uv__strscpy(char* d, const char* s, size_t n) {

FILE: core/src/lib/3rd/libuv/src/threadpool.c
  function slow_work_thread_threshold (line 45) | static unsigned int slow_work_thread_threshold(void) {
  function uv__cancelled (line 49) | static void uv__cancelled(struct uv__work* w) {
  function worker (line 57) | static void worker(void* arg) {
  function post (line 142) | static void post(QUEUE* q, enum uv__work_kind kind) {
  function uv__threadpool_cleanup (line 163) | void uv__threadpool_cleanup(void) {
  function init_threads (line 188) | static void init_threads(void) {
  function reset_once (line 236) | static void reset_once(void) {
  function init_once (line 243) | static void init_once(void) {
  function uv__work_submit (line 256) | void uv__work_submit(uv_loop_t* loop,
  function uv__work_cancel (line 269) | static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__wo...
  function uv__work_done (line 295) | void uv__work_done(uv_async_t* handle) {
  function uv__queue_work (line 318) | static void uv__queue_work(struct uv__work* w) {
  function uv__queue_done (line 325) | static void uv__queue_done(struct uv__work* w, int err) {
  function uv_queue_work (line 338) | int uv_queue_work(uv_loop_t* loop,
  function uv_cancel (line 358) | int uv_cancel(uv_req_t* req) {

FILE: core/src/lib/3rd/libuv/src/timer.c
  type heap (line 29) | struct heap
  type heap (line 31) | struct heap
  type heap (line 33) | struct heap
  function timer_less_than (line 38) | static int timer_less_than(const struct heap_node* ha,
  function uv_timer_init (line 58) | int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle) {
  function uv_timer_start (line 67) | int uv_timer_start(uv_timer_t* handle,
  function uv_timer_stop (line 98) | int uv_timer_stop(uv_timer_t* handle) {
  function uv_timer_again (line 111) | int uv_timer_again(uv_timer_t* handle) {
  function uv_timer_set_repeat (line 124) | void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat) {
  function uv_timer_get_repeat (line 129) | uint64_t uv_timer_get_repeat(const uv_timer_t* handle) {
  function uv_timer_get_due_in (line 134) | uint64_t uv_timer_get_due_in(const uv_timer_t* handle) {
  function uv__next_timeout (line 142) | int uv__next_timeout(const uv_loop_t* loop) {
  function uv__run_timers (line 163) | void uv__run_timers(uv_loop_t* loop) {
  function uv__timer_close (line 183) | void uv__timer_close(uv_timer_t* handle) {

FILE: core/src/lib/3rd/libuv/src/unix/aix-common.c
  function uv__hrtime (line 43) | uint64_t uv__hrtime(uv_clocktype_t type) {
  function uv_exepath (line 60) | int uv_exepath(char* buffer, size_t* size) {

FILE: core/src/lib/3rd/libuv/src/unix/aix.c
  function init_process_title_mutex_once (line 76) | void init_process_title_mutex_once(void) {
  function uv__platform_loop_init (line 81) | int uv__platform_loop_init(uv_loop_t* loop) {
  function uv__platform_loop_delete (line 95) | void uv__platform_loop_delete(uv_loop_t* loop) {
  function uv__io_fork (line 108) | int uv__io_fork(uv_loop_t* loop) {
  function uv__io_check_fd (line 115) | int uv__io_check_fd(uv_loop_t* loop, int fd) {
  function uv__io_poll (line 133) | void uv__io_poll(uv_loop_t* loop, int timeout) {
  function uv_get_free_memory (line 367) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 377) | uint64_t uv_get_total_memory(void) {
  function uv_get_constrained_memory (line 387) | uint64_t uv_get_constrained_memory(void) {
  function uv_loadavg (line 392) | void uv_loadavg(double avg[3]) {
  function uv__path_is_a_directory (line 425) | static int uv__path_is_a_directory(char* filename) {
  function uv__is_ahafs_mounted (line 442) | static int uv__is_ahafs_mounted(void){
  function uv__makedir_p (line 492) | static int uv__makedir_p(const char *dir) {
  function uv__make_subdirs_p (line 520) | static int uv__make_subdirs_p(const char *filename) {
  function uv__setup_ahafs (line 553) | static int uv__setup_ahafs(const char* filename, int *fd) {
  function uv__skip_lines (line 614) | static int uv__skip_lines(char **p, int n) {
  function uv__parse_data (line 638) | static int uv__parse_data(char *buf, int *events, uv_fs_event_t* handle) {
  function uv__ahafs_event (line 703) | static void uv__ahafs_event(uv_loop_t* loop, uv__io_t* event_watch, unsi...
  function uv_fs_event_init (line 757) | int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) {
  function uv_fs_event_start (line 767) | int uv_fs_event_start(uv_fs_event_t* handle,
  function uv_fs_event_stop (line 838) | int uv_fs_event_stop(uv_fs_event_t* handle) {
  function uv__fs_event_close (line 863) | void uv__fs_event_close(uv_fs_event_t* handle) {
  function uv_set_process_title (line 925) | int uv_set_process_title(const char* title) {
  function uv_get_process_title (line 960) | int uv_get_process_title(char* buffer, size_t size) {
  function uv__process_title_cleanup (line 987) | void uv__process_title_cleanup(void) {
  function uv_resident_set_memory (line 993) | int uv_resident_set_memory(size_t* rss) {
  function uv_uptime (line 1017) | int uv_uptime(double* uptime) {
  function uv_cpu_info (line 1044) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
  function uv_interface_addresses (line 1100) | int uv_interface_addresses(uv_interface_address_t** addresses, int* coun...
  function uv_free_interface_addresses (line 1268) | void uv_free_interface_addresses(uv_interface_address_t* addresses,
  function uv__platform_invalidate_fd (line 1280) | void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {

FILE: core/src/lib/3rd/libuv/src/unix/android-ifaddrs.c
  type NetlinkList (line 40) | typedef struct NetlinkList
  function netlink_socket (line 47) | static int netlink_socket(pid_t *p_pid)
  function netlink_send (line 77) | static int netlink_send(int p_socket, int p_request)
  function netlink_recv (line 102) | static int netlink_recv(int p_socket, void *p_buffer, size_t p_len)
  type nlmsghdr (line 141) | struct nlmsghdr
  type nlmsghdr (line 166) | struct nlmsghdr
  type nlmsghdr (line 167) | struct nlmsghdr
  type nlmsghdr (line 167) | struct nlmsghdr
  function NetlinkList (line 193) | static NetlinkList *newListItem(struct nlmsghdr *p_data, unsigned int p_...
  function freeResultList (line 207) | static void freeResultList(NetlinkList *p_list)
  function NetlinkList (line 219) | static NetlinkList *getResultList(int p_socket, int p_request, pid_t p_pid)
  function maxSize (line 266) | static size_t maxSize(size_t a, size_t b)
  function calcAddrLen (line 271) | static size_t calcAddrLen(sa_family_t p_family, int p_dataSize)
  function makeSockaddr (line 286) | static void makeSockaddr(sa_family_t p_family, struct sockaddr *p_dest, ...
  function addToEnd (line 307) | static void addToEnd(struct ifaddrs **p_resultList, struct ifaddrs *p_en...
  function interpretLink (line 324) | static int interpretLink(struct nlmsghdr *p_hdr, struct ifaddrs **p_resu...
  type ifaddrs (line 424) | struct ifaddrs
  type ifaddrs (line 424) | struct ifaddrs
  type ifaddrs (line 427) | struct ifaddrs
  type ifaddrs (line 430) | struct ifaddrs
  function interpretAddr (line 444) | static int interpretAddr(struct nlmsghdr *p_hdr, struct ifaddrs **p_resu...
  function interpretLinks (line 592) | static int interpretLinks(int p_socket, pid_t p_pid, NetlinkList *p_netl...
  function interpretAddrs (line 625) | static int interpretAddrs(int p_socket, pid_t p_pid, NetlinkList *p_netl...
  function getifaddrs (line 655) | int getifaddrs(struct ifaddrs **ifap)
  function freeifaddrs (line 704) | void freeifaddrs(struct ifaddrs *ifa)

FILE: core/src/lib/3rd/libuv/src/unix/async.c
  function uv_async_init (line 45) | int uv_async_init(uv_loop_t* loop, uv_async_t* handle, uv_async_cb async...
  function uv_async_send (line 63) | int uv_async_send(uv_async_t* handle) {
  function uv__async_spin (line 84) | static int uv__async_spin(uv_async_t* handle) {
  function uv__async_close (line 115) | void uv__async_close(uv_async_t* handle) {
  function uv__async_io (line 122) | static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int even...
  function uv__async_send (line 168) | static void uv__async_send(uv_loop_t* loop) {
  function uv__async_start (line 202) | static int uv__async_start(uv_loop_t* loop) {
  function uv__async_fork (line 230) | int uv__async_fork(uv_loop_t* loop) {
  function uv__async_stop (line 240) | void uv__async_stop(uv_loop_t* loop) {

FILE: core/src/lib/3rd/libuv/src/unix/bsd-ifaddrs.c
  function uv__ifaddr_exclude (line 38) | static int uv__ifaddr_exclude(struct ifaddrs *ent, int exclude_type) {
  function uv_interface_addresses (line 68) | int uv_interface_addresses(uv_interface_address_t** addresses, int* coun...
  function uv_free_interface_addresses (line 154) | void uv_free_interface_addresses(uv_interface_address_t* addresses,

FILE: core/src/lib/3rd/libuv/src/unix/bsd-proctitle.c
  function init_process_title_mutex_once (line 34) | static void init_process_title_mutex_once(void) {
  function uv__process_title_cleanup (line 40) | void uv__process_title_cleanup(void) {
  function uv_set_process_title (line 53) | int uv_set_process_title(const char* title) {
  function uv_get_process_title (line 73) | int uv_get_process_title(char* buffer, size_t size) {

FILE: core/src/lib/3rd/libuv/src/unix/core.c
  type iovec (line 94) | struct iovec
  type iovec (line 96) | struct iovec
  type iovec (line 98) | struct iovec
  type iovec (line 99) | struct iovec
  type iovec (line 100) | struct iovec
  function uv_hrtime (line 103) | uint64_t uv_hrtime(void) {
  function uv_close (line 108) | void uv_close(uv_handle_t* handle, uv_close_cb close_cb) {
  function uv__socket_sockopt (line 180) | int uv__socket_sockopt(uv_handle_t* handle, int optname, int* value) {
  function uv__make_close_pending (line 208) | void uv__make_close_pending(uv_handle_t* handle) {
  function uv__getiovmax (line 215) | int uv__getiovmax(void) {
  function uv__finish_close (line 243) | static void uv__finish_close(uv_handle_t* handle) {
  function uv__run_closing_handles (line 308) | static void uv__run_closing_handles(uv_loop_t* loop) {
  function uv_is_closing (line 323) | int uv_is_closing(const uv_handle_t* handle) {
  function uv_backend_fd (line 328) | int uv_backend_fd(const uv_loop_t* loop) {
  function uv_backend_timeout (line 333) | int uv_backend_timeout(const uv_loop_t* loop) {
  function uv__loop_alive (line 353) | static int uv__loop_alive(const uv_loop_t* loop) {
  function uv_loop_alive (line 360) | int uv_loop_alive(const uv_loop_t* loop) {
  function uv_run (line 365) | int uv_run(uv_loop_t* loop, uv_run_mode mode) {
  function uv_update_time (line 425) | void uv_update_time(uv_loop_t* loop) {
  function uv_is_active (line 430) | int uv_is_active(const uv_handle_t* handle) {
  function uv__socket (line 436) | int uv__socket(int domain, int type, int protocol) {
  function FILE (line 473) | FILE* uv__open_file(const char* path) {
  function uv__accept (line 489) | int uv__accept(int sockfd) {
  function uv__close_nocancel (line 530) | int uv__close_nocancel(int fd) {
  function uv__close_nocheckstdio (line 550) | int uv__close_nocheckstdio(int fd) {
  function uv__close (line 569) | int uv__close(int fd) {
  function uv__nonblock_ioctl (line 578) | int uv__nonblock_ioctl(int fd, int set) {
  function uv__cloexec_ioctl (line 593) | int uv__cloexec_ioctl(int fd, int set) {
  function uv__nonblock_fcntl (line 608) | int uv__nonblock_fcntl(int fd, int set) {
  function uv__cloexec_fcntl (line 639) | int uv__cloexec_fcntl(int fd, int set) {
  function uv__recvmsg (line 670) | ssize_t uv__recvmsg(int fd, struct msghdr* msg, int flags) {
  function uv_cwd (line 708) | int uv_cwd(char* buffer, size_t* size) {
  function uv_chdir (line 747) | int uv_chdir(const char* dir) {
  function uv_disable_stdio_inheritance (line 755) | void uv_disable_stdio_inheritance(void) {
  function uv_fileno (line 767) | int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd) {
  function uv__run_pending (line 797) | static int uv__run_pending(uv_loop_t* loop) {
  function next_power_of_two (line 819) | static unsigned int next_power_of_two(unsigned int val) {
  function maybe_resize (line 830) | static void maybe_resize(uv_loop_t* loop, unsigned int len) {
  function uv__io_init (line 865) | void uv__io_init(uv__io_t* w, uv__io_cb cb, int fd) {
  function uv__io_start (line 882) | void uv__io_start(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
  function uv__io_stop (line 910) | void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
  function uv__io_close (line 941) | void uv__io_close(uv_loop_t* loop, uv__io_t* w) {
  function uv__io_feed (line 951) | void uv__io_feed(uv_loop_t* loop, uv__io_t* w) {
  function uv__io_active (line 957) | int uv__io_active(const uv__io_t* w, unsigned int events) {
  function uv__fd_exists (line 964) | int uv__fd_exists(uv_loop_t* loop, int fd) {
  function uv_getrusage (line 969) | int uv_getrusage(uv_rusage_t* rusage) {
  function uv__open_cloexec (line 1002) | int uv__open_cloexec(const char* path, int flags) {
  function uv__dup2_cloexec (line 1030) | int uv__dup2_cloexec(int oldfd, int newfd) {
  function uv_os_homedir (line 1058) | int uv_os_homedir(char* buffer, size_t* size) {
  function uv_os_tmpdir (line 1094) | int uv_os_tmpdir(char* buffer, size_t* size) {
  function uv__getpwuid_r (line 1145) | int uv__getpwuid_r(uv_passwd_t* pwd) {
  function uv_os_free_passwd (line 1227) | void uv_os_free_passwd(uv_passwd_t* pwd) {
  function uv_os_get_passwd (line 1243) | int uv_os_get_passwd(uv_passwd_t* pwd) {
  function uv_translate_sys_error (line 1248) | int uv_translate_sys_error(int sys_errno) {
  function uv_os_environ (line 1254) | int uv_os_environ(uv_env_item_t** envitems, int* count) {
  function uv_os_getenv (line 1310) | int uv_os_getenv(const char* name, char* buffer, size_t* size) {
  function uv_os_setenv (line 1336) | int uv_os_setenv(const char* name, const char* value) {
  function uv_os_unsetenv (line 1347) | int uv_os_unsetenv(const char* name) {
  function uv_os_gethostname (line 1358) | int uv_os_gethostname(char* buffer, size_t* size) {
  function uv_os_fd_t (line 1388) | uv_os_fd_t uv_get_osfhandle(int fd) {
  function uv_open_osfhandle (line 1392) | int uv_open_osfhandle(uv_os_fd_t os_fd) {
  function uv_pid_t (line 1396) | uv_pid_t uv_os_getpid(void) {
  function uv_pid_t (line 1401) | uv_pid_t uv_os_getppid(void) {
  function uv_os_getpriority (line 1406) | int uv_os_getpriority(uv_pid_t pid, int* priority) {
  function uv_os_setpriority (line 1423) | int uv_os_setpriority(uv_pid_t pid, int priority) {
  function uv_os_uname (line 1434) | int uv_os_uname(uv_utsname_t* buffer) {
  function uv__getsockpeername (line 1489) | int uv__getsockpeername(const uv_handle_t* handle,
  function uv_gettimeofday (line 1511) | int uv_gettimeofday(uv_timeval64_t* tv) {
  function uv_sleep (line 1525) | void uv_sleep(unsigned int msec) {
  function uv__search_path (line 1539) | int uv__search_path(const char* prog, char* buf, size_t* buflen) {

FILE: core/src/lib/3rd/libuv/src/unix/cygwin.c
  function uv_uptime (line 28) | int uv_uptime(double* uptime) {
  function uv_resident_set_memory (line 38) | int uv_resident_set_memory(size_t* rss) {
  function uv_cpu_info (line 44) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
  function uv_get_constrained_memory (line 51) | uint64_t uv_get_constrained_memory(void) {

FILE: core/src/lib/3rd/libuv/src/unix/darwin-proctitle.c
  function uv__pthread_setname_np (line 37) | static int uv__pthread_setname_np(const char* name) {
  function uv__set_process_title (line 52) | int uv__set_process_title(const char* title) {

FILE: core/src/lib/3rd/libuv/src/unix/darwin-stub.h
  type CFArrayCallBacks (line 27) | struct CFArrayCallBacks
  type CFRunLoopSourceContext (line 28) | struct CFRunLoopSourceContext
  type FSEventStreamContext (line 29) | struct FSEventStreamContext
  type CFRange (line 30) | struct CFRange
  type CFAbsoluteTime (line 32) | typedef double CFAbsoluteTime;
  type CFTimeInterval (line 33) | typedef double CFTimeInterval;
  type FSEventStreamEventFlags (line 34) | typedef int FSEventStreamEventFlags;
  type OSStatus (line 35) | typedef int OSStatus;
  type CFIndex (line 36) | typedef long CFIndex;
  type CFArrayCallBacks (line 37) | typedef struct CFArrayCallBacks CFArrayCallBacks;
  type CFRunLoopSourceContext (line 38) | typedef struct CFRunLoopSourceContext CFRunLoopSourceContext;
  type FSEventStreamContext (line 39) | typedef struct FSEventStreamContext FSEventStreamContext;
  type FSEventStreamCreateFlags (line 40) | typedef uint32_t FSEventStreamCreateFlags;
  type FSEventStreamEventId (line 41) | typedef uint64_t FSEventStreamEventId;
  type CFStringEncoding (line 42) | typedef unsigned CFStringEncoding;
  type CFRange (line 49) | typedef struct CFRange CFRange;
  type IOOptionBits (line 56) | typedef uint32_t IOOptionBits;
  type io_iterator_t (line 57) | typedef unsigned int io_iterator_t;
  type io_object_t (line 58) | typedef unsigned int io_object_t;
  type io_service_t (line 59) | typedef unsigned int io_service_t;
  type io_registry_entry_t (line 60) | typedef unsigned int io_registry_entry_t;
  type CFRunLoopSourceContext (line 70) | struct CFRunLoopSourceContext {
  type FSEventStreamContext (line 77) | struct FSEventStreamContext {
  type CFRange (line 83) | struct CFRange {

FILE: core/src/lib/3rd/libuv/src/unix/darwin.c
  type UInt8 (line 44) | typedef unsigned char UInt8;
  function uv__platform_loop_init (line 46) | int uv__platform_loop_init(uv_loop_t* loop) {
  function uv__platform_loop_delete (line 56) | void uv__platform_loop_delete(uv_loop_t* loop) {
  function uv__hrtime_init_once (line 61) | static void uv__hrtime_init_once(void) {
  function uv__hrtime (line 71) | uint64_t uv__hrtime(uv_clocktype_t type) {
  function uv_exepath (line 77) | int uv_exepath(char* buffer, size_t* size) {
  function uv_get_free_memory (line 109) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 122) | uint64_t uv_get_total_memory(void) {
  function uv_get_constrained_memory (line 134) | uint64_t uv_get_constrained_memory(void) {
  function uv_loadavg (line 139) | void uv_loadavg(double avg[3]) {
  function uv_resident_set_memory (line 152) | int uv_resident_set_memory(size_t* rss) {
  function uv_uptime (line 173) | int uv_uptime(double* uptime) {
  function uv__get_cpu_speed (line 188) | static int uv__get_cpu_speed(uint64_t* speed) {
  function uv_cpu_info (line 319) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {

FILE: core/src/lib/3rd/libuv/src/unix/dl.c
  function uv_dlopen (line 33) | int uv_dlopen(const char* filename, uv_lib_t* lib) {
  function uv_dlclose (line 41) | void uv_dlclose(uv_lib_t* lib) {
  function uv_dlsym (line 53) | int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr) {
  function uv__dlerror (line 65) | static int uv__dlerror(uv_lib_t* lib) {

FILE: core/src/lib/3rd/libuv/src/unix/freebsd.c
  function uv__platform_loop_init (line 51) | int uv__platform_loop_init(uv_loop_t* loop) {
  function uv__platform_loop_delete (line 56) | void uv__platform_loop_delete(uv_loop_t* loop) {
  function uv_exepath (line 59) | int uv_exepath(char* buffer, size_t* size) {
  function uv_get_free_memory (line 89) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 101) | uint64_t uv_get_total_memory(void) {
  function uv_get_constrained_memory (line 114) | uint64_t uv_get_constrained_memory(void) {
  function uv_loadavg (line 119) | void uv_loadavg(double avg[3]) {
  function uv_resident_set_memory (line 132) | int uv_resident_set_memory(size_t* rss) {
  function uv_uptime (line 160) | int uv_uptime(double* uptime) {
  function uv_cpu_info (line 172) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
  function uv__sendmmsg (line 267) | int uv__sendmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) {
  function uv__recvmmsg (line 276) | int uv__recvmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) {

FILE: core/src/lib/3rd/libuv/src/unix/fs.c
  function uv__fs_close (line 165) | static int uv__fs_close(int fd) {
  function uv__fs_fsync (line 177) | static ssize_t uv__fs_fsync(uv_fs_t* req) {
  function uv__fs_fdatasync (line 201) | static ssize_t uv__fs_fdatasync(uv_fs_t* req) {
  type timespec (line 213) | struct timespec
  type timespec (line 214) | struct timespec
  type timeval (line 232) | struct timeval
  type timeval (line 233) | struct timeval
  function uv__fs_futime (line 243) | static ssize_t uv__fs_futime(uv_fs_t* req) {
  function uv__fs_mkdtemp (line 281) | static ssize_t uv__fs_mkdtemp(uv_fs_t* req) {
  function uv__mkostemp_initonce (line 289) | static void uv__mkostemp_initonce(void) {
  function uv__fs_mkstemp (line 305) | static int uv__fs_mkstemp(uv_fs_t* req) {
  function uv__fs_open (line 376) | static ssize_t uv__fs_open(uv_fs_t* req) {
  function uv__fs_preadv (line 406) | static ssize_t uv__fs_preadv(uv_file fd,
  function uv__fs_read (line 455) | static ssize_t uv__fs_read(uv_fs_t* req) {
  function uv__fs_scandir_filter (line 532) | static int uv__fs_scandir_filter(UV_CONST_DIRENT* dent) {
  function uv__fs_scandir_sort (line 537) | static int uv__fs_scandir_sort(UV_CONST_DIRENT** a, UV_CONST_DIRENT** b) {
  function uv__fs_scandir (line 542) | static ssize_t uv__fs_scandir(uv_fs_t* req) {
  function uv__fs_opendir (line 567) | static int uv__fs_opendir(uv_fs_t* req) {
  function uv__fs_readdir (line 587) | static int uv__fs_readdir(uv_fs_t* req) {
  function uv__fs_closedir (line 633) | static int uv__fs_closedir(uv_fs_t* req) {
  function uv__fs_statfs (line 648) | static int uv__fs_statfs(uv_fs_t* req) {
  function uv__fs_pathmax_size (line 691) | static ssize_t uv__fs_pathmax_size(const char* path) {
  function uv__fs_readlink (line 702) | static ssize_t uv__fs_readlink(uv_fs_t* req) {
  function uv__fs_realpath (line 761) | static ssize_t uv__fs_realpath(uv_fs_t* req) {
  function uv__fs_sendfile_emul (line 790) | static ssize_t uv__fs_sendfile_emul(uv_fs_t* req) {
  function uv__fs_sendfile (line 904) | static ssize_t uv__fs_sendfile(uv_fs_t* req) {
  function uv__fs_utime (line 1028) | static ssize_t uv__fs_utime(uv_fs_t* req) {
  function uv__fs_lutime (line 1068) | static ssize_t uv__fs_lutime(uv_fs_t* req) {
  type iovec (line 1114) | struct iovec
  type iovec (line 1121) | struct iovec
  type iovec (line 1132) | struct iovec
  function uv__fs_copyfile (line 1153) | static ssize_t uv__fs_copyfile(uv_fs_t* req) {
  function uv__to_stat (line 1326) | static void uv__to_stat(struct stat* src, uv_stat_t* dst) {
  function uv__fs_statx (line 1403) | static int uv__fs_statx(int fd,
  function uv__fs_stat (line 1483) | static int uv__fs_stat(const char *path, uv_stat_t *buf) {
  function uv__fs_lstat (line 1499) | static int uv__fs_lstat(const char *path, uv_stat_t *buf) {
  function uv__fs_fstat (line 1515) | static int uv__fs_fstat(int fd, uv_stat_t *buf) {
  function uv__fs_buf_offset (line 1530) | static size_t uv__fs_buf_offset(uv_buf_t* bufs, size_t size) {
  function uv__fs_write_all (line 1544) | static ssize_t uv__fs_write_all(uv_fs_t* req) {
  function uv__fs_work (line 1590) | static void uv__fs_work(struct uv__work* w) {
  function uv__fs_done (line 1662) | static void uv__fs_done(struct uv__work* w, int status) {
  function uv_fs_access (line 1677) | int uv_fs_access(uv_loop_t* loop,
  function uv_fs_chmod (line 1689) | int uv_fs_chmod(uv_loop_t* loop,
  function uv_fs_chown (line 1701) | int uv_fs_chown(uv_loop_t* loop,
  function uv_fs_close (line 1715) | int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
  function uv_fs_fchmod (line 1722) | int uv_fs_fchmod(uv_loop_t* loop,
  function uv_fs_fchown (line 1734) | int uv_fs_fchown(uv_loop_t* loop,
  function uv_fs_lchown (line 1748) | int uv_fs_lchown(uv_loop_t* loop,
  function uv_fs_fdatasync (line 1762) | int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_c...
  function uv_fs_fstat (line 1769) | int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
  function uv_fs_fsync (line 1776) | int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
  function uv_fs_ftruncate (line 1783) | int uv_fs_ftruncate(uv_loop_t* loop,
  function uv_fs_futime (line 1795) | int uv_fs_futime(uv_loop_t* loop,
  function uv_fs_lutime (line 1808) | int uv_fs_lutime(uv_loop_t* loop,
  function uv_fs_lstat (line 1822) | int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_c...
  function uv_fs_link (line 1829) | int uv_fs_link(uv_loop_t* loop,
  function uv_fs_mkdir (line 1840) | int uv_fs_mkdir(uv_loop_t* loop,
  function uv_fs_mkdtemp (line 1852) | int uv_fs_mkdtemp(uv_loop_t* loop,
  function uv_fs_mkstemp (line 1864) | int uv_fs_mkstemp(uv_loop_t* loop,
  function uv_fs_open (line 1876) | int uv_fs_open(uv_loop_t* loop,
  function uv_fs_read (line 1890) | int uv_fs_read(uv_loop_t* loop, uv_fs_t* req,
  function uv_fs_scandir (line 1918) | int uv_fs_scandir(uv_loop_t* loop,
  function uv_fs_opendir (line 1929) | int uv_fs_opendir(uv_loop_t* loop,
  function uv_fs_readdir (line 1938) | int uv_fs_readdir(uv_loop_t* loop,
  function uv_fs_closedir (line 1951) | int uv_fs_closedir(uv_loop_t* loop,
  function uv_fs_readlink (line 1964) | int uv_fs_readlink(uv_loop_t* loop,
  function uv_fs_realpath (line 1974) | int uv_fs_realpath(uv_loop_t* loop,
  function uv_fs_rename (line 1984) | int uv_fs_rename(uv_loop_t* loop,
  function uv_fs_rmdir (line 1995) | int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_c...
  function uv_fs_sendfile (line 2002) | int uv_fs_sendfile(uv_loop_t* loop,
  function uv_fs_stat (line 2018) | int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb...
  function uv_fs_symlink (line 2025) | int uv_fs_symlink(uv_loop_t* loop,
  function uv_fs_unlink (line 2038) | int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_...
  function uv_fs_utime (line 2045) | int uv_fs_utime(uv_loop_t* loop,
  function uv_fs_write (line 2059) | int uv_fs_write(uv_loop_t* loop,
  function uv_fs_req_cleanup (line 2088) | void uv_fs_req_cleanup(uv_fs_t* req) {
  function uv_fs_copyfile (line 2121) | int uv_fs_copyfile(uv_loop_t* loop,
  function uv_fs_statfs (line 2141) | int uv_fs_statfs(uv_loop_t* loop,
  function uv_fs_get_system_error (line 2150) | int uv_fs_get_system_error(const uv_fs_t* req) {

FILE: core/src/lib/3rd/libuv/src/unix/fsevents.c
  function uv__fsevents_init (line 29) | int uv__fsevents_init(uv_fs_event_t* handle) {
  function uv__fsevents_close (line 34) | int uv__fsevents_close(uv_fs_event_t* handle) {
  function uv__fsevents_loop_delete (line 39) | void uv__fsevents_loop_delete(uv_loop_t* loop) {
  type uv__fsevents_event_t (line 72) | typedef struct uv__fsevents_event_s uv__fsevents_event_t;
  type uv__cf_loop_signal_t (line 73) | typedef struct uv__cf_loop_signal_s uv__cf_loop_signal_t;
  type uv__cf_loop_state_t (line 74) | typedef struct uv__cf_loop_state_s uv__cf_loop_state_t;
  type uv__cf_loop_signal_type_e (line 76) | enum uv__cf_loop_signal_type_e {
  type uv__cf_loop_signal_type_t (line 80) | typedef enum uv__cf_loop_signal_type_e uv__cf_loop_signal_type_t;
  type uv__cf_loop_signal_s (line 82) | struct uv__cf_loop_signal_s {
  type uv__fsevents_event_s (line 88) | struct uv__fsevents_event_s {
  type uv__cf_loop_state_s (line 94) | struct uv__cf_loop_state_s {
  function uv__fsevents_cb (line 185) | void uv__fsevents_cb(uv_async_t* cb) {
  function uv__fsevents_push_event (line 197) | static void uv__fsevents_push_event(uv_fs_event_t* handle,
  function uv__fsevents_event_cb (line 217) | static void uv__fsevents_event_cb(const FSEventStreamRef streamRef,
  function uv__fsevents_create_stream (line 334) | static int uv__fsevents_create_stream(uv_loop_t* loop, CFArrayRef paths) {
  function uv__fsevents_destroy_stream (line 392) | static void uv__fsevents_destroy_stream(uv_loop_t* loop) {
  function uv__fsevents_reschedule (line 411) | static void uv__fsevents_reschedule(uv_fs_event_t* handle,
  function uv__fsevents_global_init (line 516) | static int uv__fsevents_global_init(void) {
  function uv__fsevents_loop_init (line 595) | static int uv__fsevents_loop_init(uv_loop_t* loop) {
  function uv__fsevents_loop_delete (line 693) | void uv__fsevents_loop_delete(uv_loop_t* loop) {
  function uv__cf_loop_cb (line 753) | static void uv__cf_loop_cb(void* arg) {
  function uv__cf_loop_signal (line 785) | int uv__cf_loop_signal(uv_loop_t* loop,
  function uv__fsevents_init (line 813) | int uv__fsevents_init(uv_fs_event_t* handle) {
  function uv__fsevents_close (line 883) | int uv__fsevents_close(uv_fs_event_t* handle) {

FILE: core/src/lib/3rd/libuv/src/unix/getaddrinfo.c
  function uv__getaddrinfo_translate_error (line 42) | int uv__getaddrinfo_translate_error(int sys_err) {
  function uv__getaddrinfo_work (line 101) | static void uv__getaddrinfo_work(struct uv__work* w) {
  function uv__getaddrinfo_done (line 111) | static void uv__getaddrinfo_done(struct uv__work* w, int status) {
  function uv_getaddrinfo (line 141) | int uv_getaddrinfo(uv_loop_t* loop,
  function uv_freeaddrinfo (line 223) | void uv_freeaddrinfo(struct addrinfo* ai) {
  function uv_if_indextoname (line 229) | int uv_if_indextoname(unsigned int ifindex, char* buffer, size_t* size) {
  function uv_if_indextoiid (line 253) | int uv_if_indextoiid(unsigned int ifindex, char* buffer, size_t* size) {

FILE: core/src/lib/3rd/libuv/src/unix/getnameinfo.c
  function uv__getnameinfo_work (line 31) | static void uv__getnameinfo_work(struct uv__work* w) {
  function uv__getnameinfo_done (line 55) | static void uv__getnameinfo_done(struct uv__work* w, int status) {
  function uv_getnameinfo (line 81) | int uv_getnameinfo(uv_loop_t* loop,

FILE: core/src/lib/3rd/libuv/src/unix/haiku.c
  function uv_loadavg (line 29) | void uv_loadavg(double avg[3]) {
  function uv_exepath (line 36) | int uv_exepath(char* buffer, size_t* size) {
  function uv_get_free_memory (line 58) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 70) | uint64_t uv_get_total_memory(void) {
  function uv_get_constrained_memory (line 82) | uint64_t uv_get_constrained_memory(void) {
  function uv_resident_set_memory (line 87) | int uv_resident_set_memory(size_t* rss) {
  function uv_uptime (line 106) | int uv_uptime(double* uptime) {
  function uv_cpu_info (line 113) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {

FILE: core/src/lib/3rd/libuv/src/unix/ibmi.c
  type SSTS0200 (line 65) | typedef struct {
  type LIND0500 (line 105) | typedef struct {
  type errcode_s (line 111) | typedef struct {
  function iconv_e2a (line 156) | static void iconv_e2a(unsigned char src[], unsigned char dst[], size_t l...
  function iconv_a2e (line 163) | static void iconv_a2e(const char* src, unsigned char dst[], size_t lengt...
  function init_process_title_mutex_once (line 177) | void init_process_title_mutex_once(void) {
  function get_ibmi_system_status (line 181) | static int get_ibmi_system_status(SSTS0200* rcvr) {
  function uv_get_free_memory (line 228) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 238) | uint64_t uv_get_total_memory(void) {
  function uv_get_constrained_memory (line 248) | uint64_t uv_get_constrained_memory(void) {
  function uv_loadavg (line 253) | void uv_loadavg(double avg[3]) {
  function uv_resident_set_memory (line 272) | int uv_resident_set_memory(size_t* rss) {
  function uv_uptime (line 278) | int uv_uptime(double* uptime) {
  function uv_cpu_info (line 283) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
  function get_ibmi_physical_address (line 314) | static int get_ibmi_physical_address(const char* line, char (*phys_addr)...
  function uv_interface_addresses (line 386) | int uv_interface_addresses(uv_interface_address_t** addresses, int* coun...
  function uv_free_interface_addresses (line 459) | void uv_free_interface_addresses(uv_interface_address_t* addresses, int ...
  function uv_set_process_title (line 488) | int uv_set_process_title(const char* title) {
  function uv_get_process_title (line 492) | int uv_get_process_title(char* buffer, size_t size) {
  function uv__process_title_cleanup (line 500) | void uv__process_title_cleanup(void) {

FILE: core/src/lib/3rd/libuv/src/unix/internal.h
  type uv__stream_queued_fds_t (line 133) | typedef struct uv__stream_queued_fds_s uv__stream_queued_fds_t;
  type uv_clocktype_t (line 146) | typedef enum {
  type uv__stream_queued_fds_s (line 151) | struct uv__stream_queued_fds_s {
  type msghdr (line 194) | struct msghdr
  type sockaddr (line 315) | struct sockaddr
  type sockaddr (line 319) | struct sockaddr
  type uv__mmsghdr (line 326) | struct uv__mmsghdr {
  type uv__mmsghdr (line 331) | struct uv__mmsghdr
  type uv__mmsghdr (line 332) | struct uv__mmsghdr

FILE: core/src/lib/3rd/libuv/src/unix/kqueue.c
  function uv__kqueue_init (line 51) | int uv__kqueue_init(uv_loop_t* loop) {
  function uv__io_fork (line 66) | int uv__io_fork(uv_loop_t* loop) {
  function uv__io_check_fd (line 94) | int uv__io_check_fd(uv_loop_t* loop, int fd) {
  function uv__io_poll (line 112) | void uv__io_poll(uv_loop_t* loop, int timeout) {
  function uv__platform_invalidate_fd (line 424) | void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
  function uv__fs_event (line 444) | static void uv__fs_event(uv_loop_t* loop, uv__io_t* w, unsigned int ffla...
  function uv_fs_event_init (line 486) | int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) {
  function uv_fs_event_start (line 492) | int uv_fs_event_start(uv_fs_event_t* handle,
  function uv_fs_event_stop (line 555) | int uv_fs_event_stop(uv_fs_event_t* handle) {
  function uv__fs_event_close (line 583) | void uv__fs_event_close(uv_fs_event_t* handle) {

FILE: core/src/lib/3rd/libuv/src/unix/linux-core.c
  function uv__platform_loop_init (line 86) | int uv__platform_loop_init(uv_loop_t* loop) {
  function uv__io_fork (line 111) | int uv__io_fork(uv_loop_t* loop) {
  function uv__platform_loop_delete (line 129) | void uv__platform_loop_delete(uv_loop_t* loop) {
  function uv__platform_invalidate_fd (line 137) | void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
  function uv__io_check_fd (line 170) | int uv__io_check_fd(uv_loop_t* loop, int fd) {
  function uv__io_poll (line 191) | void uv__io_poll(uv_loop_t* loop, int timeout) {
  function uv__hrtime (line 512) | uint64_t uv__hrtime(uv_clocktype_t type) {
  function uv_resident_set_memory (line 549) | int uv_resident_set_memory(size_t* rss) {
  function uv__slurp (line 605) | static int uv__slurp(const char* filename, char* buf, size_t len) {
  function uv_uptime (line 630) | int uv_uptime(double* uptime) {
  function uv__cpu_num (line 662) | static int uv__cpu_num(FILE* statfile_fp, unsigned int* numcpus) {
  function uv_cpu_info (line 684) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
  function read_speeds (line 735) | static void read_speeds(unsigned int numcpus, uv_cpu_info_t* ci) {
  function read_models (line 748) | static int read_models(unsigned int numcpus, uv_cpu_info_t* ci) {
  function read_times (line 841) | static int read_times(FILE* statfile_fp,
  function read_cpufreq (line 915) | static uint64_t read_cpufreq(unsigned int cpunum) {
  function uv__ifaddr_exclude (line 938) | static int uv__ifaddr_exclude(struct ifaddrs *ent, int exclude_type) {
  function uv_interface_addresses (line 952) | int uv_interface_addresses(uv_interface_address_t** addresses, int* coun...
  function uv_free_interface_addresses (line 1040) | void uv_free_interface_addresses(uv_interface_address_t* addresses,
  function uv__set_process_title (line 1052) | void uv__set_process_title(const char* title) {
  function uv__read_proc_meminfo (line 1059) | static uint64_t uv__read_proc_meminfo(const char* what) {
  function uv_get_free_memory (line 1081) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 1097) | uint64_t uv_get_total_memory(void) {
  function uv__read_cgroups_uint64 (line 1113) | static uint64_t uv__read_cgroups_uint64(const char* cgroup, const char* ...
  function uv_get_constrained_memory (line 1127) | uint64_t uv_get_constrained_memory(void) {
  function uv_loadavg (line 1137) | void uv_loadavg(double avg[3]) {

FILE: core/src/lib/3rd/libuv/src/unix/linux-inotify.c
  type watcher_list (line 36) | struct watcher_list {
  type watcher_root (line 44) | struct watcher_root {
  function compare_watchers (line 50) | static int compare_watchers(const struct watcher_list* a,
  type watcher_list (line 65) | struct watcher_list
  function init_inotify (line 68) | static int init_inotify(uv_loop_t* loop) {
  function uv__inotify_fork (line 86) | int uv__inotify_fork(uv_loop_t* loop, void* old_watchers) {
  type watcher_list (line 151) | struct watcher_list
  type watcher_list (line 152) | struct watcher_list
  function maybe_free_watcher_list (line 157) | static void maybe_free_watcher_list(struct watcher_list* w, uv_loop_t* l...
  function uv__inotify_read (line 167) | static void uv__inotify_read(uv_loop_t* loop,
  function uv_fs_event_init (line 243) | int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) {
  function uv_fs_event_start (line 249) | int uv_fs_event_start(uv_fs_event_t* handle,
  function uv_fs_event_stop (line 305) | int uv_fs_event_stop(uv_fs_event_t* handle) {
  function uv__fs_event_close (line 325) | void uv__fs_event_close(uv_fs_event_t* handle) {

FILE: core/src/lib/3rd/libuv/src/unix/linux-syscalls.c
  type uv__mmsghdr (line 143) | struct uv__mmsghdr
  function uv__sendmmsg (line 145) | int uv__sendmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) {
  function uv__recvmmsg (line 170) | int uv__recvmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) {
  function uv__preadv (line 196) | ssize_t uv__preadv(int fd, const struct iovec *iov, int iovcnt, int64_t ...
  function uv__pwritev (line 205) | ssize_t uv__pwritev(int fd, const struct iovec *iov, int iovcnt, int64_t...
  function uv__dup3 (line 214) | int uv__dup3(int oldfd, int newfd, int flags) {
  function uv__fs_copy_file_range (line 223) | ssize_t
  function uv__statx (line 245) | int uv__statx(int dirfd,
  function uv__getrandom (line 258) | ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags) {

FILE: core/src/lib/3rd/libuv/src/unix/linux-syscalls.h
  type uv__statx_timestamp (line 34) | struct uv__statx_timestamp {
  type uv__statx (line 40) | struct uv__statx {
  type iovec (line 64) | struct iovec
  type iovec (line 65) | struct iovec
  type uv__statx (line 78) | struct uv__statx

FILE: core/src/lib/3rd/libuv/src/unix/loop.c
  function uv_loop_init (line 30) | int uv_loop_init(uv_loop_t* loop) {
  function uv_loop_fork (line 132) | int uv_loop_fork(uv_loop_t* loop) {
  function uv__loop_close (line 165) | void uv__loop_close(uv_loop_t* loop) {
  function uv__loop_configure (line 211) | int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list a...

FILE: core/src/lib/3rd/libuv/src/unix/netbsd.c
  function uv__platform_loop_init (line 44) | int uv__platform_loop_init(uv_loop_t* loop) {
  function uv__platform_loop_delete (line 49) | void uv__platform_loop_delete(uv_loop_t* loop) {
  function uv_loadavg (line 53) | void uv_loadavg(double avg[3]) {
  function uv_exepath (line 66) | int uv_exepath(char* buffer, size_t* size) {
  function uv_get_free_memory (line 100) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 112) | uint64_t uv_get_total_memory(void) {
  function uv_get_constrained_memory (line 129) | uint64_t uv_get_constrained_memory(void) {
  function uv_resident_set_memory (line 134) | int uv_resident_set_memory(size_t* rss) {
  function uv_uptime (line 164) | int uv_uptime(double* uptime) {
  function uv_cpu_info (line 180) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
  function uv__random_sysctl (line 238) | int uv__random_sysctl(void* buf, size_t len) {

FILE: core/src/lib/3rd/libuv/src/unix/no-fsevents.c
  function uv_fs_event_init (line 27) | int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) {
  function uv_fs_event_start (line 31) | int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb,
  function uv_fs_event_stop (line 36) | int uv_fs_event_stop(uv_fs_event_t* handle) {
  function uv__fs_event_close (line 40) | void uv__fs_event_close(uv_fs_event_t* handle) {

FILE: core/src/lib/3rd/libuv/src/unix/no-proctitle.c
  function uv__process_title_cleanup (line 32) | void uv__process_title_cleanup(void) {
  function uv_set_process_title (line 35) | int uv_set_process_title(const char* title) {
  function uv_get_process_title (line 39) | int uv_get_process_title(char* buffer, size_t size) {

FILE: core/src/lib/3rd/libuv/src/unix/openbsd.c
  function uv__platform_loop_init (line 39) | int uv__platform_loop_init(uv_loop_t* loop) {
  function uv__platform_loop_delete (line 44) | void uv__platform_loop_delete(uv_loop_t* loop) {
  function uv_loadavg (line 48) | void uv_loadavg(double avg[3]) {
  function uv_exepath (line 61) | int uv_exepath(char* buffer, size_t* size) {
  function uv_get_free_memory (line 113) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 125) | uint64_t uv_get_total_memory(void) {
  function uv_get_constrained_memory (line 137) | uint64_t uv_get_constrained_memory(void) {
  function uv_resident_set_memory (line 142) | int uv_resident_set_memory(size_t* rss) {
  function uv_uptime (line 163) | int uv_uptime(double* uptime) {
  function uv_cpu_info (line 179) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {

FILE: core/src/lib/3rd/libuv/src/unix/os390-syscalls.c
  function scandir (line 40) | int scandir(const char* maindir, struct dirent*** namelist,
  function next_power_of_two (line 100) | static unsigned int next_power_of_two(unsigned int val) {
  function maybe_resize (line 112) | static void maybe_resize(uv__os390_epoll* lst, unsigned int len) {
  function init_message_queue (line 145) | static void init_message_queue(uv__os390_epoll* lst) {
  function before_fork (line 171) | static void before_fork(void) {
  function after_fork (line 176) | static void after_fork(void) {
  function child_fork (line 181) | static void child_fork(void) {
  function epoll_init (line 204) | static void epoll_init(void) {
  function uv__os390_epoll (line 214) | uv__os390_epoll* epoll_create1(int flags) {
  function epoll_ctl (line 237) | int epoll_ctl(uv__os390_epoll* lst,
  function epoll_wait (line 283) | int epoll_wait(uv__os390_epoll* lst, struct epoll_event* events,
  function epoll_file_close (line 353) | int epoll_file_close(int fd) {
  function epoll_queue_close (line 370) | void epoll_queue_close(uv__os390_epoll* lst) {
  function nanosleep (line 384) | int nanosleep(const struct timespec* req, struct timespec* rem) {
  function os390_readlink (line 484) | ssize_t os390_readlink(const char* path, char* buf, size_t len) {
  function strnlen (line 553) | size_t strnlen(const char* str, size_t maxlen) {
  function sem_init (line 562) | int sem_init(UV_PLATFORM_SEM_T* semid, int pshared, unsigned int value) {
  function sem_destroy (line 567) | int sem_destroy(UV_PLATFORM_SEM_T* semid) {
  function sem_post (line 572) | int sem_post(UV_PLATFORM_SEM_T* semid) {
  function sem_trywait (line 577) | int sem_trywait(UV_PLATFORM_SEM_T* semid) {
  function sem_wait (line 582) | int sem_wait(UV_PLATFORM_SEM_T* semid) {

FILE: core/src/lib/3rd/libuv/src/unix/os390-syscalls.h
  type epoll_event (line 40) | struct epoll_event {
  type uv__os390_epoll (line 46) | typedef struct {
  type epoll_event (line 55) | struct epoll_event
  type epoll_event (line 56) | struct epoll_event
  type timespec (line 60) | struct timespec
  type timespec (line 60) | struct timespec
  type dirent (line 61) | struct dirent
  type dirent (line 62) | struct dirent
  type dirent (line 63) | struct dirent
  type dirent (line 64) | struct dirent

FILE: core/src/lib/3rd/libuv/src/unix/os390.c
  type data_area_ptr_assign_type (line 98) | typedef unsigned data_area_ptr_assign_type;
  type data_area_ptr (line 100) | typedef union {
  function uv_loadavg (line 111) | void uv_loadavg(double avg[3]) {
  function uv__platform_loop_init (line 119) | int uv__platform_loop_init(uv_loop_t* loop) {
  function uv__platform_loop_delete (line 131) | void uv__platform_loop_delete(uv_loop_t* loop) {
  function uv__hrtime (line 139) | uint64_t uv__hrtime(uv_clocktype_t type) {
  function getexe (line 151) | static int getexe(const int pid, char* buf, size_t len) {
  function uv_exepath (line 254) | int uv_exepath(char* buffer, size_t* size) {
  function uv_get_free_memory (line 271) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 283) | uint64_t uv_get_total_memory(void) {
  function uv_get_constrained_memory (line 295) | uint64_t uv_get_constrained_memory(void) {
  function uv_resident_set_memory (line 300) | int uv_resident_set_memory(size_t* rss) {
  function uv_uptime (line 314) | int uv_uptime(double* uptime) {
  function uv_cpu_info (line 328) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
  function uv__interface_addresses_v6 (line 372) | static int uv__interface_addresses_v6(uv_interface_address_t** addresses,
  function uv_interface_addresses (line 456) | int uv_interface_addresses(uv_interface_address_t** addresses, int* coun...
  function uv_free_interface_addresses (line 578) | void uv_free_interface_addresses(uv_interface_address_t* addresses,
  function uv__platform_invalidate_fd (line 587) | void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
  function uv__io_check_fd (line 610) | int uv__io_check_fd(uv_loop_t* loop, int fd) {
  function uv__fs_event_close (line 631) | void uv__fs_event_close(uv_fs_event_t* handle) {
  function uv_fs_event_init (line 636) | int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) {
  function uv_fs_event_start (line 642) | int uv_fs_event_start(uv_fs_event_t* handle, uv_fs_event_cb cb,
  function uv_fs_event_stop (line 678) | int uv_fs_event_stop(uv_fs_event_t* handle) {
  function os390_message_queue_handler (line 710) | static int os390_message_queue_handler(uv__os390_epoll* ep) {
  function uv__io_poll (line 742) | void uv__io_poll(uv_loop_t* loop, int timeout) {
  function uv__set_process_title (line 962) | void uv__set_process_title(const char* title) {
  function uv__io_fork (line 966) | int uv__io_fork(uv_loop_t* loop) {

FILE: core/src/lib/3rd/libuv/src/unix/pipe.c
  function uv_pipe_init (line 33) | int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) {
  function uv_pipe_bind (line 43) | int uv_pipe_bind(uv_pipe_t* handle, const char* name) {
  function uv_pipe_listen (line 94) | int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb) {
  function uv__pipe_close (line 120) | void uv__pipe_close(uv_pipe_t* handle) {
  function uv_pipe_open (line 137) | int uv_pipe_open(uv_pipe_t* handle, uv_file fd) {
  function uv_pipe_connect (line 173) | void uv_pipe_connect(uv_connect_t* req,
  function uv__pipe_getsockpeername (line 240) | static int uv__pipe_getsockpeername(const uv_pipe_t* handle,
  function uv_pipe_getsockname (line 284) | int uv_pipe_getsockname(const uv_pipe_t* handle, char* buffer, size_t* s...
  function uv_pipe_getpeername (line 289) | int uv_pipe_getpeername(const uv_pipe_t* handle, char* buffer, size_t* s...
  function uv_pipe_pending_instances (line 294) | void uv_pipe_pending_instances(uv_pipe_t* handle, int count) {
  function uv_pipe_pending_count (line 298) | int uv_pipe_pending_count(uv_pipe_t* handle) {
  function uv_handle_type (line 315) | uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle) {
  function uv_pipe_chmod (line 326) | int uv_pipe_chmod(uv_pipe_t* handle, int mode) {
  function uv_pipe (line 384) | int uv_pipe(uv_os_fd_t fds[2], int read_flags, int write_flags) {
  function uv__make_pipe (line 431) | int uv__make_pipe(int fds[2], int flags) {

FILE: core/src/lib/3rd/libuv/src/unix/poll.c
  function uv__poll_io (line 30) | static void uv__poll_io(uv_loop_t* loop, uv__io_t* w, unsigned int event...
  function uv_poll_init (line 68) | int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd) {
  function uv_poll_init_socket (line 96) | int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle,
  function uv__poll_stop (line 102) | static void uv__poll_stop(uv_poll_t* handle) {
  function uv_poll_stop (line 111) | int uv_poll_stop(uv_poll_t* handle) {
  function uv_poll_start (line 118) | int uv_poll_start(uv_poll_t* handle, int pevents, uv_poll_cb poll_cb) {
  function uv__poll_close (line 157) | void uv__poll_close(uv_poll_t* handle) {

FILE: core/src/lib/3rd/libuv/src/unix/posix-hrtime.c
  function uv__hrtime (line 31) | uint64_t uv__hrtime(uv_clocktype_t type) {

FILE: core/src/lib/3rd/libuv/src/unix/posix-poll.c
  function uv__platform_loop_init (line 36) | int uv__platform_loop_init(uv_loop_t* loop) {
  function uv__platform_loop_delete (line 44) | void uv__platform_loop_delete(uv_loop_t* loop) {
  function uv__io_fork (line 49) | int uv__io_fork(uv_loop_t* loop) {
  function uv__pollfds_maybe_resize (line 55) | static void uv__pollfds_maybe_resize(uv_loop_t* loop) {
  function uv__pollfds_swap (line 78) | static void uv__pollfds_swap(uv_loop_t* loop, size_t l, size_t r) {
  function uv__pollfds_add (line 86) | static void uv__pollfds_add(uv_loop_t* loop, uv__io_t* w) {
  function uv__pollfds_del (line 107) | static void uv__pollfds_del(uv_loop_t* loop, int fd) {
  function uv__io_poll (line 134) | void uv__io_poll(uv_loop_t* loop, int timeout) {
  function uv__platform_invalidate_fd (line 336) | void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
  function uv__io_check_fd (line 356) | int uv__io_check_fd(uv_loop_t* loop, int fd) {

FILE: core/src/lib/3rd/libuv/src/unix/process.c
  function uv__chld (line 48) | static void uv__chld(uv_signal_t* handle, int signum) {
  function uv__process_init_stdio (line 118) | static int uv__process_init_stdio(uv_stdio_container_t* container, int f...
  function uv__process_open_stream (line 155) | static int uv__process_open_stream(uv_stdio_container_t* container,
  function uv__process_close_stream (line 180) | static void uv__process_close_stream(uv_stdio_container_t* container) {
  function uv__write_int (line 186) | static void uv__write_int(int fd, int val) {
  function uv__process_child_init (line 205) | static void uv__process_child_init(const uv_process_options_t* options,
  function uv_spawn (line 346) | int uv_spawn(uv_loop_t* loop,
  function uv_process_kill (line 515) | int uv_process_kill(uv_process_t* process, int signum) {
  function uv_kill (line 520) | int uv_kill(int pid, int signum) {
  function uv__process_close (line 528) | void uv__process_close(uv_process_t* handle) {

FILE: core/src/lib/3rd/libuv/src/unix/procfs-exepath.c
  function uv_exepath (line 28) | int uv_exepath(char* buffer, size_t* size) {

FILE: core/src/lib/3rd/libuv/src/unix/proctitle.c
  type uv__process_title (line 27) | struct uv__process_title {
  type uv__process_title (line 37) | struct uv__process_title
  function init_process_title_mutex_once (line 41) | static void init_process_title_mutex_once(void) {
  type uv__process_title (line 47) | struct uv__process_title
  function uv_set_process_title (line 99) | int uv_set_process_title(const char* title) {
  function uv_get_process_title (line 130) | int uv_get_process_title(char* buffer, size_t size) {
  function uv__process_title_cleanup (line 157) | void uv__process_title_cleanup(void) {

FILE: core/src/lib/3rd/libuv/src/unix/pthread-fixes.c
  function uv__pthread_sigmask (line 39) | int uv__pthread_sigmask(int how, const sigset_t* set, sigset_t* oset) {

FILE: core/src/lib/3rd/libuv/src/unix/qnx.c
  function get_mem_info (line 32) | static void
  function uv_loadavg (line 51) | void uv_loadavg(double avg[3]) {
  function uv_exepath (line 58) | int uv_exepath(char* buffer, size_t* size) {
  function uv_get_free_memory (line 70) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 78) | uint64_t uv_get_total_memory(void) {
  function uv_get_constrained_memory (line 86) | uint64_t uv_get_constrained_memory(void) {
  function uv_resident_set_memory (line 91) | int uv_resident_set_memory(size_t* rss) {
  function uv_uptime (line 110) | int uv_uptime(double* uptime) {
  function uv_cpu_info (line 117) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {

FILE: core/src/lib/3rd/libuv/src/unix/random-devurandom.c
  function uv__random_readpath (line 32) | int uv__random_readpath(const char* path, void* buf, size_t buflen) {
  function uv__random_devurandom_init (line 74) | static void uv__random_devurandom_init(void) {
  function uv__random_devurandom (line 86) | int uv__random_devurandom(void* buf, size_t buflen) {

FILE: core/src/lib/3rd/libuv/src/unix/random-getentropy.c
  function uv__random_getentropy_init (line 34) | static void uv__random_getentropy_init(void) {
  function uv__random_getentropy (line 39) | int uv__random_getentropy(void* buf, size_t buflen) {

FILE: core/src/lib/3rd/libuv/src/unix/random-getrandom.c
  function uv__random_getrandom_init_once (line 41) | static void uv__random_getrandom_init_once(void) {
  function uv__random_getrandom_init (line 45) | static int uv__random_getrandom_init(void) {
  function uv__random_getrandom (line 56) | int uv__random_getrandom(void* buf, size_t buflen) {

FILE: core/src/lib/3rd/libuv/src/unix/random-sysctl-linux.c
  type uv__sysctl_args (line 32) | struct uv__sysctl_args {
  function uv__random_sysctl (line 43) | int uv__random_sysctl(void* buf, size_t buflen) {

FILE: core/src/lib/3rd/libuv/src/unix/signal.c
  type uv__signal_msg_t (line 35) | typedef struct {
  type uv__signal_tree_s (line 55) | struct uv__signal_tree_s
  function uv__signal_global_init (line 65) | static void uv__signal_global_init(void) {
  function uv__signal_cleanup (line 80) | void uv__signal_cleanup(void) {
  function uv__signal_global_reinit (line 100) | static void uv__signal_global_reinit(void) {
  function uv__signal_global_once_init (line 111) | void uv__signal_global_once_init(void) {
  function uv__signal_lock (line 116) | static int uv__signal_lock(void) {
  function uv__signal_unlock (line 128) | static int uv__signal_unlock(void) {
  function uv__signal_block_and_lock (line 140) | static void uv__signal_block_and_lock(sigset_t* saved_sigmask) {
  function uv__signal_unlock_and_unblock (line 156) | static void uv__signal_unlock_and_unblock(sigset_t* saved_sigmask) {
  function uv_signal_t (line 165) | static uv_signal_t* uv__signal_first_handle(int signum) {
  function uv__signal_handler (line 183) | static void uv__signal_handler(int signum) {
  function uv__signal_register_handler (line 224) | static int uv__signal_register_handler(int signum, int oneshot) {
  function uv__signal_unregister_handler (line 245) | static void uv__signal_unregister_handler(int signum) {
  function uv__signal_loop_once_init (line 261) | static int uv__signal_loop_once_init(uv_loop_t* loop) {
  function uv__signal_loop_fork (line 281) | int uv__signal_loop_fork(uv_loop_t* loop) {
  function uv__signal_loop_cleanup (line 291) | void uv__signal_loop_cleanup(uv_loop_t* loop) {
  function uv_signal_init (line 319) | int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle) {
  function uv__signal_close (line 335) | void uv__signal_close(uv_signal_t* handle) {
  function uv_signal_start (line 340) | int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int sig...
  function uv_signal_start_oneshot (line 345) | int uv_signal_start_oneshot(uv_signal_t* handle,
  function uv__signal_start (line 352) | static int uv__signal_start(uv_signal_t* handle,
  function uv__signal_event (line 416) | static void uv__signal_event(uv_loop_t* loop,
  function uv__signal_compare (line 483) | static int uv__signal_compare(uv_signal_t* w1, uv_signal_t* w2) {
  function uv_signal_stop (line 513) | int uv_signal_stop(uv_signal_t* handle) {
  function uv__signal_stop (line 520) | static void uv__signal_stop(uv_signal_t* handle) {

FILE: core/src/lib/3rd/libuv/src/unix/spinlock.h
  type uv_spinlock_t (line 24) | typedef struct {

FILE: core/src/lib/3rd/libuv/src/unix/stream.c
  type uv__stream_select_t (line 44) | typedef struct uv__stream_select_s uv__stream_select_t;
  type uv__stream_select_s (line 46) | struct uv__stream_select_s {
  function uv__stream_init (line 85) | void uv__stream_init(uv_loop_t* loop,
  function uv__stream_osx_interrupt_select (line 123) | static void uv__stream_osx_interrupt_select(uv_stream_t* stream) {
  function uv__stream_osx_select (line 149) | static void uv__stream_osx_select(void* arg) {
  function uv__stream_osx_select_cb (line 237) | static void uv__stream_osx_select_cb(uv_async_t* handle) {
  function uv__stream_osx_cb_close (line 269) | static void uv__stream_osx_cb_close(uv_handle_t* async) {
  function uv__stream_try_select (line 277) | int uv__stream_try_select(uv_stream_t* stream, int* fd) {
  function uv__stream_open (line 406) | int uv__stream_open(uv_stream_t* stream, int fd, int flags) {
  function uv__stream_flush_write_queue (line 443) | void uv__stream_flush_write_queue(uv_stream_t* stream, int error) {
  function uv__stream_destroy (line 458) | void uv__stream_destroy(uv_stream_t* stream) {
  function uv__emfile_trick (line 497) | static int uv__emfile_trick(uv_loop_t* loop, int accept_fd) {
  function uv__server_io (line 528) | void uv__server_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
  function uv_accept (line 591) | int uv_accept(uv_stream_t* server, uv_stream_t* client) {
  function uv_listen (line 656) | int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb) {
  function uv__drain (line 679) | static void uv__drain(uv_stream_t* stream) {
  function uv__writev (line 711) | static ssize_t uv__writev(int fd, struct iovec* vec, size_t n) {
  function uv__write_req_size (line 719) | static size_t uv__write_req_size(uv_write_t* req) {
  function uv__write_req_update (line 737) | static int uv__write_req_update(uv_stream_t* stream,
  function uv__write_req_finish (line 762) | static void uv__write_req_finish(uv_write_t* req) {
  function uv__handle_fd (line 788) | static int uv__handle_fd(uv_handle_t* handle) {
  function uv__write (line 802) | static void uv__write(uv_stream_t* stream) {
  function uv__write_callbacks (line 927) | static void uv__write_callbacks(uv_stream_t* stream) {
  function uv_handle_type (line 958) | uv_handle_type uv__handle_type(int fd) {
  function uv__stream_eof (line 1001) | static void uv__stream_eof(uv_stream_t* stream, const uv_buf_t* buf) {
  function uv__stream_queue_fd (line 1012) | static int uv__stream_queue_fd(uv_stream_t* stream, int fd) {
  function uv__stream_recv_cmsg (line 1060) | static int uv__stream_recv_cmsg(uv_stream_t* stream, struct msghdr* msg) {
  function uv__read (line 1116) | static void uv__read(uv_stream_t* stream) {
  function uv_shutdown (line 1259) | int uv_shutdown(uv_shutdown_t* req, uv_stream_t* stream, uv_shutdown_cb ...
  function uv__stream_io (line 1287) | static void uv__stream_io(uv_loop_t* loop, uv__io_t* w, unsigned int eve...
  function uv__stream_connect (line 1344) | static void uv__stream_connect(uv_stream_t* stream) {
  function uv_write2 (line 1393) | int uv_write2(uv_write_t* req,
  function uv_write (line 1492) | int uv_write(uv_write_t* req,
  function uv_try_write_cb (line 1501) | void uv_try_write_cb(uv_write_t* req, int status) {
  function uv_try_write (line 1507) | int uv_try_write(uv_stream_t* stream,
  function uv__read_start (line 1555) | int uv__read_start(uv_stream_t* stream,
  function uv_read_stop (line 1584) | int uv_read_stop(uv_stream_t* stream) {
  function uv_is_readable (line 1600) | int uv_is_readable(const uv_stream_t* stream) {
  function uv_is_writable (line 1605) | int uv_is_writable(const uv_stream_t* stream) {
  function uv___stream_fd (line 1611) | int uv___stream_fd(const uv_stream_t* handle) {
  function uv__stream_close (line 1627) | void uv__stream_close(uv_stream_t* handle) {
  function uv_stream_set_blocking (line 1682) | int uv_stream_set_blocking(uv_stream_t* handle, int blocking) {

FILE: core/src/lib/3rd/libuv/src/unix/sunos.c
  function uv__platform_loop_init (line 67) | int uv__platform_loop_init(uv_loop_t* loop) {
  function uv__platform_loop_delete (line 89) | void uv__platform_loop_delete(uv_loop_t* loop) {
  function uv__io_fork (line 102) | int uv__io_fork(uv_loop_t* loop) {
  function uv__platform_invalidate_fd (line 114) | void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
  function uv__io_check_fd (line 134) | int uv__io_check_fd(uv_loop_t* loop, int fd) {
  function uv__io_poll (line 147) | void uv__io_poll(uv_loop_t* loop, int timeout) {
  function uv__hrtime (line 372) | uint64_t uv__hrtime(uv_clocktype_t type) {
  function uv_exepath (line 382) | int uv_exepath(char* buffer, size_t* size) {
  function uv_get_free_memory (line 404) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 409) | uint64_t uv_get_total_memory(void) {
  function uv_get_constrained_memory (line 414) | uint64_t uv_get_constrained_memory(void) {
  function uv_loadavg (line 419) | void uv_loadavg(double avg[3]) {
  function uv__fs_event_rearm (line 426) | static int uv__fs_event_rearm(uv_fs_event_t *handle) {
  function uv__fs_event_read (line 443) | static void uv__fs_event_read(uv_loop_t* loop,
  function uv_fs_event_init (line 497) | int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) {
  function uv_fs_event_start (line 503) | int uv_fs_event_start(uv_fs_event_t* handle,
  function uv_fs_event_stop (line 545) | int uv_fs_event_stop(uv_fs_event_t* handle) {
  function uv__fs_event_close (line 564) | void uv__fs_event_close(uv_fs_event_t* handle) {
  function uv_fs_event_init (line 570) | int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) {
  function uv_fs_event_start (line 575) | int uv_fs_event_start(uv_fs_event_t* handle,
  function uv_fs_event_stop (line 583) | int uv_fs_event_stop(uv_fs_event_t* handle) {
  function uv__fs_event_close (line 588) | void uv__fs_event_close(uv_fs_event_t* handle) {
  function uv_resident_set_memory (line 595) | int uv_resident_set_memory(size_t* rss) {
  function uv_uptime (line 616) | int uv_uptime(double* uptime) {
  function uv_cpu_info (line 640) | int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
  function uv_interface_addresses (line 731) | int uv_interface_addresses(uv_interface_address_t** addresses, int* coun...
  function uv__set_phys_addr (line 742) | static int uv__set_phys_addr(uv_interface_address_t* address,
  function uv__ifaddr_exclude (line 785) | static int uv__ifaddr_exclude(struct ifaddrs *ent) {
  function uv_interface_addresses (line 796) | int uv_interface_addresses(uv_interface_address_t** addresses, int* coun...
  function uv_free_interface_addresses (line 858) | void uv_free_interface_addresses(uv_interface_address_t* addresses,

FILE: core/src/lib/3rd/libuv/src/unix/sysinfo-loadavg.c
  function uv_loadavg (line 28) | void uv_loadavg(double avg[3]) {

FILE: core/src/lib/3rd/libuv/src/unix/sysinfo-memory.c
  function uv_get_free_memory (line 28) | uint64_t uv_get_free_memory(void) {
  function uv_get_total_memory (line 36) | uint64_t uv_get_total_memory(void) {

FILE: core/src/lib/3rd/libuv/src/unix/tcp.c
  function new_socket (line 31) | static int new_socket(uv_tcp_t* handle, int domain, unsigned long flags) {
  function maybe_new_socket (line 67) | static int maybe_new_socket(uv_tcp_t* handle, int domain, unsigned long ...
  function uv_tcp_init_ex (line 114) | int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* tcp, unsigned int flags) {
  function uv_tcp_init (line 143) | int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* tcp) {
  function uv__tcp_bind (line 148) | int uv__tcp_bind(uv_tcp_t* tcp,
  function uv__tcp_connect (line 204) | int uv__tcp_connect(uv_connect_t* req,
  function uv_tcp_open (line 270) | int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock) {
  function uv_tcp_getsockname (line 286) | int uv_tcp_getsockname(const uv_tcp_t* handle,
  function uv_tcp_getpeername (line 300) | int uv_tcp_getpeername(const uv_tcp_t* handle,
  function uv_tcp_close_reset (line 314) | int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb) {
  function uv_tcp_listen (line 331) | int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) {
  function uv__tcp_nodelay (line 376) | int uv__tcp_nodelay(int fd, int on) {
  function uv__tcp_keepalive (line 383) | int uv__tcp_keepalive(int fd, int on, unsigned int delay) {
  function uv_tcp_nodelay (line 413) | int uv_tcp_nodelay(uv_tcp_t* handle, int on) {
  function uv_tcp_keepalive (line 431) | int uv_tcp_keepalive(uv_tcp_t* handle, int on, unsigned int delay) {
  function uv_tcp_simultaneous_accepts (line 453) | int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable) {
  function uv__tcp_close (line 462) | void uv__tcp_close(uv_tcp_t* handle) {
  function uv_socketpair (line 467) | int uv_socketpair(int type, int protocol, uv_os_sock_t fds[2], int flags...

FILE: core/src/lib/3rd/libuv/src/unix/thread.c
  function uv_barrier_init (line 55) | int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) {
  function uv_barrier_wait (line 89) | int uv_barrier_wait(uv_barrier_t* barrier) {
  function uv_barrier_destroy (line 118) | void uv_barrier_destroy(uv_barrier_t* barrier) {
  function uv_barrier_init (line 140) | int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) {
  function uv_barrier_wait (line 145) | int uv_barrier_wait(uv_barrier_t* barrier) {
  function uv_barrier_destroy (line 157) | void uv_barrier_destroy(uv_barrier_t* barrier) {
  function thread_stack_size (line 171) | static size_t thread_stack_size(void) {
  function uv_thread_create (line 210) | int uv_thread_create(uv_thread_t *tid, void (*entry)(void *arg), void *a...
  function uv_thread_create_ex (line 216) | int uv_thread_create_ex(uv_thread_t* tid,
  function uv_thread_t (line 268) | uv_thread_t uv_thread_self(void) {
  function uv_thread_join (line 272) | int uv_thread_join(uv_thread_t *tid) {
  function uv_thread_equal (line 277) | int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2) {
  function uv_mutex_init (line 282) | int uv_mutex_init(uv_mutex_t* mutex) {
  function uv_mutex_init_recursive (line 305) | int uv_mutex_init_recursive(uv_mutex_t* mutex) {
  function uv_mutex_destroy (line 324) | void uv_mutex_destroy(uv_mutex_t* mutex) {
  function uv_mutex_lock (line 330) | void uv_mutex_lock(uv_mutex_t* mutex) {
  function uv_mutex_trylock (line 336) | int uv_mutex_trylock(uv_mutex_t* mutex) {
  function uv_mutex_unlock (line 350) | void uv_mutex_unlock(uv_mutex_t* mutex) {
  function uv_rwlock_init (line 356) | int uv_rwlock_init(uv_rwlock_t* rwlock) {
  function uv_rwlock_destroy (line 361) | void uv_rwlock_destroy(uv_rwlock_t* rwlock) {
  function uv_rwlock_rdlock (line 367) | void uv_rwlock_rdlock(uv_rwlock_t* rwlock) {
  function uv_rwlock_tryrdlock (line 373) | int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock) {
  function uv_rwlock_rdunlock (line 387) | void uv_rwlock_rdunlock(uv_rwlock_t* rwlock) {
  function uv_rwlock_wrlock (line 393) | void uv_rwlock_wrlock(uv_rwlock_t* rwlock) {
  function uv_rwlock_trywrlock (line 399) | int uv_rwlock_trywrlock(uv_rwlock_t* rwlock) {
  function uv_rwlock_wrunlock (line 413) | void uv_rwlock_wrunlock(uv_rwlock_t* rwlock) {
  function uv_once (line 419) | void uv_once(uv_once_t* guard, void (*callback)(void)) {
  function uv_sem_init (line 426) | int uv_sem_init(uv_sem_t* sem, unsigned int value) {
  function uv_sem_destroy (line 442) | void uv_sem_destroy(uv_sem_t* sem) {
  function uv_sem_post (line 448) | void uv_sem_post(uv_sem_t* sem) {
  function uv_sem_wait (line 454) | void uv_sem_wait(uv_sem_t* sem) {
  function uv_sem_trywait (line 466) | int uv_sem_trywait(uv_sem_t* sem) {
  function glibc_version_check (line 498) | static void glibc_version_check(void) {
  type uv_semaphore_t (line 515) | typedef struct uv_semaphore_s {
  function uv__custom_sem_init (line 526) | static int uv__custom_sem_init(uv_sem_t* sem_, unsigned int value) {
  function uv__custom_sem_destroy (line 551) | static void uv__custom_sem_destroy(uv_sem_t* sem_) {
  function uv__custom_sem_post (line 561) | static void uv__custom_sem_post(uv_sem_t* sem_) {
  function uv__custom_sem_wait (line 573) | static void uv__custom_sem_wait(uv_sem_t* sem_) {
  function uv__custom_sem_trywait (line 585) | static int uv__custom_sem_trywait(uv_sem_t* sem_) {
  function uv__sem_init (line 603) | static int uv__sem_init(uv_sem_t* sem, unsigned int value) {
  function uv__sem_destroy (line 610) | static void uv__sem_destroy(uv_sem_t* sem) {
  function uv__sem_post (line 616) | static void uv__sem_post(uv_sem_t* sem) {
  function uv__sem_wait (line 622) | static void uv__sem_wait(uv_sem_t* sem) {
  function uv__sem_trywait (line 634) | static int uv__sem_trywait(uv_sem_t* sem) {
  function uv_sem_init (line 650) | int uv_sem_init(uv_sem_t* sem, unsigned int value) {
  function uv_sem_destroy (line 662) | void uv_sem_destroy(uv_sem_t* sem) {
  function uv_sem_post (line 670) | void uv_sem_post(uv_sem_t* sem) {
  function uv_sem_wait (line 678) | void uv_sem_wait(uv_sem_t* sem) {
  function uv_sem_trywait (line 686) | int uv_sem_trywait(uv_sem_t* sem) {
  function uv_cond_init (line 698) | int uv_cond_init(uv_cond_t* cond) {
  function uv_cond_init (line 704) | int uv_cond_init(uv_cond_t* cond) {
  function uv_cond_destroy (line 735) | void uv_cond_destroy(uv_cond_t* cond) {
  function uv_cond_signal (line 769) | void uv_cond_signal(uv_cond_t* cond) {
  function uv_cond_broadcast (line 774) | void uv_cond_broadcast(uv_cond_t* cond) {
  function uv_cond_wait (line 779) | void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) {
  function uv_cond_timedwait (line 785) | int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeo...
  function uv_key_create (line 823) | int uv_key_create(uv_key_t* key) {
  function uv_key_delete (line 828) | void uv_key_delete(uv_key_t* key) {
  function uv_key_set (line 839) | void uv_key_set(uv_key_t* key, void* value) {

FILE: core/src/lib/3rd/libuv/src/unix/tty.c
  function isreallyatty (line 53) | static int isreallyatty(int file) {
  type termios (line 66) | struct termios
  function uv__tty_is_slave (line 69) | static int uv__tty_is_slave(const int fd) {
  function uv_tty_init (line 123) | int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, int fd, int unused) {
  function uv__tty_make_raw (line 231) | static void uv__tty_make_raw(struct termios* tio) {
  function uv_tty_set_mode (line 250) | int uv_tty_set_mode(uv_tty_t* tty, uv_tty_mode_t mode) {
  function uv_tty_get_winsize (line 297) | int uv_tty_get_winsize(uv_tty_t* tty, int* width, int* height) {
  function uv_handle_type (line 315) | uv_handle_type uv_guess_handle(uv_file file) {
  function uv_tty_reset_mode (line 378) | int uv_tty_reset_mode(void) {
  function uv_tty_set_vterm_state (line 397) | void uv_tty_set_vterm_state(uv_tty_vtermstate_t state) {
  function uv_tty_get_vterm_state (line 400) | int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state) {

FILE: core/src/lib/3rd/libuv/src/unix/udp.c
  type sockaddr_in6 (line 46) | struct sockaddr_in6
  type sockaddr_in (line 47) | struct sockaddr_in
  type sockaddr (line 48) | struct sockaddr
  function uv__udp_mmsg_init (line 70) | static void uv__udp_mmsg_init(void) {
  function uv__udp_close (line 90) | void uv__udp_close(uv_udp_t* handle) {
  function uv__udp_finish_close (line 101) | void uv__udp_finish_close(uv_udp_t* handle) {
  function uv__udp_run_completed (line 129) | static void uv__udp_run_completed(uv_udp_t* handle) {
  function uv__udp_io (line 173) | static void uv__udp_io(uv_loop_t* loop, uv__io_t* w, unsigned int revent...
  function uv__udp_recvmmsg (line 189) | static int uv__udp_recvmmsg(uv_udp_t* handle, uv_buf_t* buf) {
  function uv__udp_recvmsg (line 247) | static void uv__udp_recvmsg(uv_udp_t* handle) {
  function uv__udp_sendmmsg (line 316) | static void uv__udp_sendmmsg(uv_udp_t* handle) {
  function uv__udp_sendmsg (line 406) | static void uv__udp_sendmsg(uv_udp_t* handle) {
  function uv__set_reuse (line 480) | static int uv__set_reuse(int fd) {
  function uv__udp_bind (line 508) | int uv__udp_bind(uv_udp_t* handle,
  function uv__udp_maybe_deferred_bind (line 569) | static int uv__udp_maybe_deferred_bind(uv_udp_t* handle,
  function uv__udp_connect (line 606) | int uv__udp_connect(uv_udp_t* handle,
  function uv__udp_disconnect (line 629) | int uv__udp_disconnect(uv_udp_t* handle) {
  function uv__udp_send (line 650) | int uv__udp_send(uv_udp_send_t* req,
  function uv__udp_try_send (line 716) | int uv__udp_try_send(uv_udp_t* handle,
  function uv__udp_set_membership4 (line 760) | static int uv__udp_set_membership4(uv_udp_t* handle,
  function uv__udp_set_membership6 (line 807) | static int uv__udp_set_membership6(uv_udp_t* handle,
  function uv__udp_set_source_membership4 (line 859) | static int uv__udp_set_source_membership4(uv_udp_t* handle,
  function uv__udp_set_source_membership6 (line 904) | static int uv__udp_set_source_membership6(uv_udp_t* handle,
  function uv__udp_init_ex (line 954) | int uv__udp_init_ex(uv_loop_t* loop,
  function uv_udp_using_recvmmsg (line 980) | int uv_udp_using_recvmmsg(const uv_udp_t* handle) {
  function uv_udp_open (line 991) | int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) {
  function uv_udp_set_membership (line 1017) | int uv_udp_set_membership(uv_udp_t* handle,
  function uv_udp_set_source_membership (line 1041) | int uv_udp_set_source_membership(uv_udp_t* handle,
  function uv__setsockopt (line 1084) | static int uv__setsockopt(uv_udp_t* handle,
  function uv__setsockopt_maybe_char (line 1109) | static int uv__setsockopt_maybe_char(uv_udp_t* handle,
  function uv_udp_set_broadcast (line 1128) | int uv_udp_set_broadcast(uv_udp_t* handle, int on) {
  function uv_udp_set_ttl (line 1141) | int uv_udp_set_ttl(uv_udp_t* handle, int ttl) {
  function uv_udp_set_multicast_ttl (line 1178) | int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl) {
  function uv_udp_set_multicast_loop (line 1203) | int uv_udp_set_multicast_loop(uv_udp_t* handle, int on) {
  function uv_udp_set_multicast_interface (line 1227) | int uv_udp_set_multicast_interface(uv_udp_t* handle, const char* interfa...
  function uv_udp_getpeername (line 1276) | int uv_udp_getpeername(const uv_udp_t* handle,
  function uv_udp_getsockname (line 1286) | int uv_udp_getsockname(const uv_udp_t* handle,
  function uv__udp_recv_start (line 1297) | int uv__udp_recv_start(uv_udp_t* handle,
  function uv__udp_recv_stop (line 1322) | int uv__udp_recv_stop(uv_udp_t* handle) {

FILE: core/src/lib/3rd/libuv/src/uv-common.c
  type uv__allocator_t (line 41) | typedef struct {
  function uv__free (line 81) | void uv__free(void* ptr) {
  function uv_replace_allocator (line 114) | int uv_replace_allocator(uv_malloc_func malloc_func,
  function uv_handle_size (line 133) | size_t uv_handle_size(uv_handle_type type) {
  function uv_req_size (line 141) | size_t uv_req_size(uv_req_type type) {
  function uv_loop_size (line 152) | size_t uv_loop_size(void) {
  function uv_buf_t (line 157) | uv_buf_t uv_buf_init(char* base, unsigned int len) {
  function uv_ip4_addr (line 221) | int uv_ip4_addr(const char* ip, int port, struct sockaddr_in* addr) {
  function uv_ip6_addr (line 232) | int uv_ip6_addr(const char* ip, int port, struct sockaddr_in6* addr) {
  function uv_ip4_name (line 267) | int uv_ip4_name(const struct sockaddr_in* src, char* dst, size_t size) {
  function uv_ip6_name (line 272) | int uv_ip6_name(const struct sockaddr_in6* src, char* dst, size_t size) {
  function uv_tcp_bind (line 277) | int uv_tcp_bind(uv_tcp_t* handle,
  function uv_udp_init_ex (line 296) | int uv_udp_init_ex(uv_loop_t* loop, uv_udp_t* handle, unsigned flags) {
  function uv_udp_init (line 321) | int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle) {
  function uv_udp_bind (line 326) | int uv_udp_bind(uv_udp_t* handle,
  function uv_tcp_connect (line 345) | int uv_tcp_connect(uv_connect_t* req,
  function uv_udp_connect (line 365) | int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr) {
  function uv__udp_is_connected (line 393) | int uv__udp_is_connected(uv_udp_t* handle) {
  function uv__udp_check_before_send (line 407) | int uv__udp_check_before_send(uv_udp_t* handle, const struct sockaddr* a...
  function uv_udp_send (line 438) | int uv_udp_send(uv_udp_send_t* req,
  function uv_udp_try_send (line 454) | int uv_udp_try_send(uv_udp_t* handle,
  function uv_udp_recv_start (line 468) | int uv_udp_recv_start(uv_udp_t* handle,
  function uv_udp_recv_stop (line 478) | int uv_udp_recv_stop(uv_udp_t* handle) {
  function uv_walk (line 486) | void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) {
  function uv__print_handles (line 505) | static void uv__print_handles(uv_loop_t* loop, int only_active, FILE* st...
  function uv_print_all_handles (line 537) | void uv_print_all_handles(uv_loop_t* loop, FILE* stream) {
  function uv_print_active_handles (line 542) | void uv_print_active_handles(uv_loop_t* loop, FILE* stream) {
  function uv_ref (line 547) | void uv_ref(uv_handle_t* handle) {
  function uv_unref (line 552) | void uv_unref(uv_handle_t* handle) {
  function uv_has_ref (line 557) | int uv_has_ref(const uv_handle_t* handle) {
  function uv_stop (line 562) | void uv_stop(uv_loop_t* loop) {
  function uv_now (line 567) | uint64_t uv_now(const uv_loop_t* loop) {
  function uv__count_bufs (line 573) | size_t uv__count_bufs(const uv_buf_t bufs[], unsigned int nbufs) {
  function uv_recv_buffer_size (line 584) | int uv_recv_buffer_size(uv_handle_t* handle, int* value) {
  function uv_send_buffer_size (line 588) | int uv_send_buffer_size(uv_handle_t* handle, int *value) {
  function uv_fs_event_getpath (line 592) | int uv_fs_event_getpath(uv_fs_event_t* handle, char* buffer, size_t* siz...
  function uv__fs_scandir_cleanup (line 635) | void uv__fs_scandir_cleanup(uv_fs_t* req) {
  function uv_fs_scandir_next (line 651) | int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent) {
  function uv_dirent_type_t (line 688) | uv_dirent_type_t uv__fs_get_dirent_type(uv__dirent_t* dent) {
  function uv__fs_readdir_cleanup (line 724) | void uv__fs_readdir_cleanup(uv_fs_t* req) {
  function uv_loop_configure (line 746) | int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...) {
  function uv_loop_t (line 763) | uv_loop_t* uv_default_loop(void) {
  function uv_loop_t (line 775) | uv_loop_t* uv_loop_new(void) {
  function uv_loop_close (line 791) | int uv_loop_close(uv_loop_t* loop) {
  function uv_loop_delete (line 821) | void uv_loop_delete(uv_loop_t* loop) {
  function uv_read_start (line 835) | int uv_read_start(uv_stream_t* stream,
  function uv_os_free_environ (line 854) | void uv_os_free_environ(uv_env_item_t* envitems, int count) {
  function uv_free_cpu_info (line 865) | void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) {
  function uv_library_shutdown (line 876) | __attribute__((destructor))
  function uv__metrics_update_idle_time (line 891) | void uv__metrics_update_idle_time(uv_loop_t* loop) {
  function uv__metrics_set_provider_entry_time (line 918) | void uv__metrics_set_provider_entry_time(uv_loop_t* loop) {
  function uv_metrics_idle_time (line 933) | uint64_t uv_metrics_idle_time(uv_loop_t* loop) {

FILE: core/src/lib/3rd/libuv/src/uv-common.h
  type sockaddr (line 144) | struct sockaddr
  type sockaddr (line 150) | struct sockaddr
  type sockaddr (line 160) | struct sockaddr
  type sockaddr (line 165) | struct sockaddr
  type sockaddr (line 176) | struct sockaddr
  type sockaddr (line 183) | struct sockaddr
  type uv__work_kind (line 195) | enum uv__work_kind {
  type uv__work (line 202) | struct uv__work
  type uv__work_kind (line 203) | enum uv__work_kind
  type uv__work (line 204) | struct uv__work
  type uv__work (line 205) | struct uv__work
  type uv__loop_metrics_t (line 355) | typedef struct uv__loop_metrics_s uv__loop_metrics_t;
  type uv__loop_internal_fields_t (line 356) | typedef struct uv__loop_internal_fields_s uv__loop_internal_fields_t;
  type uv__loop_metrics_s (line 358) | struct uv__loop_metrics_s {
  type uv__loop_internal_fields_s (line 367) | struct uv__loop_internal_fields_s {

FILE: core/src/lib/3rd/libuv/src/uv-data-getter-setters.c
  function uv_handle_type (line 36) | uv_handle_type uv_handle_get_type(const uv_handle_t* handle) {
  function uv_loop_t (line 44) | uv_loop_t* uv_handle_get_loop(const uv_handle_t* handle) {
  function uv_handle_set_data (line 48) | void uv_handle_set_data(uv_handle_t* handle, void* data) {
  function uv_req_type (line 65) | uv_req_type uv_req_get_type(const uv_req_t* req) {
  function uv_req_set_data (line 73) | void uv_req_set_data(uv_req_t* req, void* data) {
  function uv_stream_get_write_queue_size (line 77) | size_t uv_stream_get_write_queue_size(const uv_stream_t* stream) {
  function uv_udp_get_send_queue_size (line 81) | size_t uv_udp_get_send_queue_size(const uv_udp_t* handle) {
  function uv_udp_get_send_queue_count (line 85) | size_t uv_udp_get_send_queue_count(const uv_udp_t* handle) {
  function uv_pid_t (line 89) | uv_pid_t uv_process_get_pid(const uv_process_t* proc) {
  function uv_fs_type (line 93) | uv_fs_type uv_fs_get_type(const uv_fs_t* req) {
  function uv_fs_get_result (line 97) | ssize_t uv_fs_get_result(const uv_fs_t* req) {
  function uv_stat_t (line 109) | uv_stat_t* uv_fs_get_statbuf(uv_fs_t* req) {
  function uv_loop_set_data (line 117) | void uv_loop_set_data(uv_loop_t* loop, void* data) {

FILE: core/src/lib/3rd/libuv/src/version.c
  function uv_version (line 38) | unsigned int uv_version(void) {

FILE: core/src/lib/3rd/libuv/src/win/async.c
  function uv_async_endgame (line 31) | void uv_async_endgame(uv_loop_t* loop, uv_async_t* handle) {
  function uv_async_init (line 40) | int uv_async_init(uv_loop_t* loop, uv_async_t* handle, uv_async_cb async...
  function uv_async_close (line 57) | void uv_async_close(uv_loop_t* loop, uv_async_t* handle) {
  function uv_async_send (line 66) | int uv_async_send(uv_async_t* handle) {
  function uv_process_async_wakeup_req (line 86) | void uv_process_async_wakeup_req(uv_loop_t* loop, uv_async_t* handle,

FILE: core/src/lib/3rd/libuv/src/win/atomicops-inl.h
  function uv__atomic_exchange_set (line 38) | static char INLINE uv__atomic_exchange_set(char volatile* target) {
  function uv__atomic_exchange_set (line 45) | static inline char uv__atomic_exchange_set(char volatile* target) {

FILE: core/src/lib/3rd/libuv/src/win/core.c
  function uv__crt_dbg_report_handler (line 50) | static int uv__crt_dbg_report_handler(int report_type, char *message, in...
  function uv__crt_invalid_parameter_handler (line 74) | static void uv__crt_invalid_parameter_handler(const wchar_t* expression,
  function uv__loops_init (line 87) | static void uv__loops_init(void) {
  function uv__loops_add (line 91) | static int uv__loops_add(uv_loop_t* loop) {
  function uv__loops_remove (line 118) | static void uv__loops_remove(uv_loop_t* loop) {
  function uv__wake_all_loops (line 162) | void uv__wake_all_loops(void) {
  function uv_init (line 176) | static void uv_init(void) {
  function uv_loop_init (line 224) | int uv_loop_init(uv_loop_t* loop) {
  function uv_update_time (line 322) | void uv_update_time(uv_loop_t* loop) {
  function uv__once_init (line 329) | void uv__once_init(void) {
  function uv__loop_close (line 334) | void uv__loop_close(uv_loop_t* loop) {
  function uv__loop_configure (line 375) | int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list a...
  function uv_backend_fd (line 388) | int uv_backend_fd(const uv_loop_t* loop) {
  function uv_loop_fork (line 393) | int uv_loop_fork(uv_loop_t* loop) {
  function uv_backend_timeout (line 398) | int uv_backend_timeout(const uv_loop_t* loop) {
  function uv__poll_wine (line 418) | static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
  function uv__poll (line 497) | static void uv__poll(uv_loop_t* loop, DWORD timeout) {
  function uv__loop_alive (line 584) | static int uv__loop_alive(const uv_loop_t* loop) {
  function uv_loop_alive (line 591) | int uv_loop_alive(const uv_loop_t* loop) {
  function uv_run (line 596) | int uv_run(uv_loop_t *loop, uv_run_mode mode) {
  function uv_fileno (line 659) | int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd) {
  function uv__socket_sockopt (line 695) | int uv__socket_sockopt(uv_handle_t* handle, int optname, int* value) {
  function uv_cpumask_size (line 723) | int uv_cpumask_size(void) {
  function uv__getsockpeername (line 727) | int uv__getsockpeername(const uv_handle_t* handle,

FILE: core/src/lib/3rd/libuv/src/win/detect-wakeup.c
  function uv__init_detect_system_wakeup (line 28) | void uv__init_detect_system_wakeup(void) {
  function ULONG (line 35) | static ULONG CALLBACK uv__system_resume_callback(PVOID Context,
  function uv__register_system_resume_callback (line 44) | static void uv__register_system_resume_callback(void) {

FILE: core/src/lib/3rd/libuv/src/win/dl.c
  function uv_dlopen (line 28) | int uv_dlopen(const char* filename, uv_lib_t* lib) {
  function uv_dlclose (line 52) | void uv_dlclose(uv_lib_t* lib) {
  function uv_dlsym (line 66) | int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr) {
  function uv__format_fallback_error (line 78) | static void uv__format_fallback_error(uv_lib_t* lib, int errorno){
  function uv__dlerror (line 93) | static int uv__dlerror(uv_lib_t* lib, const char* filename, DWORD errorn...

FILE: core/src/lib/3rd/libuv/src/win/error.c
  function uv_fatal_error (line 35) | void uv_fatal_error(const int errorno, const char* syscall) {
  function uv_translate_sys_error (line 66) | int uv_translate_sys_error(int sys_errno) {

FILE: core/src/lib/3rd/libuv/src/win/fs-event.c
  function uv_fs_event_queue_readdirchanges (line 36) | static void uv_fs_event_queue_readdirchanges(uv_loop_t* loop,
  function uv_relative_path (line 66) | static void uv_relative_path(const WCHAR* filename,
  function uv_split_path (line 83) | static int uv_split_path(const WCHAR* filename, WCHAR** dir,
  function uv_fs_event_init (line 140) | int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle) {
  function uv_fs_event_start (line 156) | int uv_fs_event_start(uv_fs_event_t* handle,
  function uv_fs_event_stop (line 372) | int uv_fs_event_stop(uv_fs_event_t* handle) {
  function file_info_cmp (line 407) | static int file_info_cmp(WCHAR* str, WCHAR* file_name, size_t file_name_...
  function uv_process_fs_event_req (line 426) | void uv_process_fs_event_req(uv_loop_t* loop, uv_req_t* req,
  function uv_fs_event_close (line 585) | void uv_fs_event_close(uv_loop_t* loop, uv_fs_event_t* handle) {
  function uv_fs_event_endgame (line 597) | void uv_fs_event_endgame(uv_loop_t* loop, uv_fs_event_t* handle) {

FILE: core/src/lib/3rd/libuv/src/win/fs-fd-hash-inl.h
  type uv__fd_info_s (line 45) | struct uv__fd_info_s {
  type uv__fd_hash_entry_s (line 53) | struct uv__fd_hash_entry_s {
  type uv__fd_hash_entry_group_s (line 58) | struct uv__fd_hash_entry_group_s {
  type uv__fd_hash_bucket_s (line 63) | struct uv__fd_hash_bucket_s {
  type uv__fd_hash_entry_group_s (line 71) | struct uv__fd_hash_entry_group_s
  type uv__fd_hash_bucket_s (line 73) | struct uv__fd_hash_bucket_s
  function INLINE (line 76) | INLINE static void uv__fd_hash_init(void) {
  function INLINE (line 122) | INLINE static int uv__fd_hash_get(int fd, struct uv__fd_info_s* info) {
  function INLINE (line 137) | INLINE static void uv__fd_hash_add(int fd, struct uv__fd_info_s* info) {
  function INLINE (line 167) | INLINE static int uv__fd_hash_remove(int fd, struct uv__fd_info_s* info) {

FILE: core/src/lib/3rd/libuv/src/win/fs.c
  function uv__filetime_to_timespec (line 98) | static void uv__filetime_to_timespec(uv_timespec_t *ts, int64_t filetime) {
  function uv_fs_init (line 135) | void uv_fs_init(void) {
  function INLINE (line 145) | INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
  function INLINE (line 244) | INLINE static void uv_fs_req_init(uv_loop_t* loop, uv_fs_t* req,
  function fs__wide_to_utf8 (line 260) | static int fs__wide_to_utf8(WCHAR* w_source_ptr,
  function INLINE (line 309) | INLINE static int fs__readlink_handle(HANDLE handle, char** target_ptr,
  function fs__open (line 444) | void fs__open(uv_fs_t* req) {
  function fs__close (line 699) | void fs__close(uv_fs_t* req) {
  function LONG (line 729) | LONG fs__filemap_ex_filter(LONG excode, PEXCEPTION_POINTERS pep,
  function fs__read_filemap (line 749) | void fs__read_filemap(uv_fs_t* req, struct uv__fd_info_s* fd_info) {
  function fs__read (line 846) | void fs__read(uv_fs_t* req) {
  function fs__write_filemap (line 924) | void fs__write_filemap(uv_fs_t* req, HANDLE file,
  function fs__write (line 1048) | void fs__write(uv_fs_t* req) {
  function fs__rmdir (line 1119) | void fs__rmdir(uv_fs_t* req) {
  function fs__unlink (line 1128) | void fs__unlink(uv_fs_t* req) {
  function fs__mkdir (line 1215) | void fs__mkdir(uv_fs_t* req) {
  function fs__mktemp (line 1230) | void fs__mktemp(uv_fs_t* req, uv__fs_mktemp_func func) {
  function fs__mkdtemp_func (line 1278) | static int fs__mkdtemp_func(uv_fs_t* req) {
  function fs__mkdtemp (line 1294) | void fs__mkdtemp(uv_fs_t* req) {
  function fs__mkstemp_func (line 1299) | static int fs__mkstemp_func(uv_fs_t* req) {
  function fs__mkstemp (line 1347) | void fs__mkstemp(uv_fs_t* req) {
  function fs__scandir (line 1352) | void fs__scandir(uv_fs_t* req) {
  function fs__opendir (line 1564) | void fs__opendir(uv_fs_t* req) {
  function fs__readdir (line 1623) | void fs__readdir(uv_fs_t* req) {
  function fs__closedir (line 1687) | void fs__closedir(uv_fs_t* req) {
  function INLINE (line 1696) | INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf,
  function INLINE (line 1841) | INLINE static void fs__stat_prepare_path(WCHAR* pathw) {
  function INLINE (line 1852) | INLINE static DWORD fs__stat_impl_from_path(WCHAR* path,
  function INLINE (line 1883) | INLINE static void fs__stat_impl(uv_fs_t* req, int do_lstat) {
  function fs__stat (line 1906) | static void fs__stat(uv_fs_t* req) {
  function fs__lstat (line 1912) | static void fs__lstat(uv_fs_t* req) {
  function fs__fstat (line 1918) | static void fs__fstat(uv_fs_t* req) {
  function fs__rename (line 1941) | static void fs__rename(uv_fs_t* req) {
  function INLINE (line 1951) | INLINE static void fs__sync_impl(uv_fs_t* req) {
  function fs__fsync (line 1966) | static void fs__fsync(uv_fs_t* req) {
  function fs__fdatasync (line 1971) | static void fs__fdatasync(uv_fs_t* req) {
  function fs__ftruncate (line 1976) | static void fs__ftruncate(uv_fs_t* req) {
  function fs__copyfile (line 2052) | static void fs__copyfile(uv_fs_t* req) {
  function fs__sendfile (line 2089) | static void fs__sendfile(uv_fs_t* req) {
  function fs__access (line 2136) | static void fs__access(uv_fs_t* req) {
  function fs__chmod (line 2162) | static void fs__chmod(uv_fs_t* req) {
  function fs__fchmod (line 2171) | static void fs__fchmod(uv_fs_t* req) {
  function INLINE (line 2257) | INLINE static int fs__utime_handle(HANDLE handle, double atime, double m...
  function INLINE (line 2270) | INLINE static DWORD fs__utime_impl_from_path(WCHAR* path,
  function INLINE (line 2303) | INLINE static void fs__utime_impl(uv_fs_t* req, int do_lutime) {
  function fs__utime (line 2328) | static void fs__utime(uv_fs_t* req) {
  function fs__futime (line 2333) | static void fs__futime(uv_fs_t* req) {
  function fs__lutime (line 2353) | static void fs__lutime(uv_fs_t* req) {
  function fs__link (line 2358) | static void fs__link(uv_fs_t* req) {
  function fs__create_junction (line 2367) | static void fs__create_junction(uv_fs_t* req, const WCHAR* path,
  function fs__symlink (line 2537) | static void fs__symlink(uv_fs_t* req) {
  function fs__readlink (line 2578) | static void fs__readlink(uv_fs_t* req) {
  function fs__realpath_handle (line 2607) | static ssize_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) {
  function fs__realpath (line 2655) | static void fs__realpath(uv_fs_t* req) {
  function fs__chown (line 2682) | static void fs__chown(uv_fs_t* req) {
  function fs__fchown (line 2687) | static void fs__fchown(uv_fs_t* req) {
  function fs__lchown (line 2692) | static void fs__lchown(uv_fs_t* req) {
  function fs__statfs (line 2697) | static void fs__statfs(uv_fs_t* req) {
  function uv__fs_work (line 2780) | static void uv__fs_work(struct uv__work* w) {
  function uv__fs_done (line 2830) | static void uv__fs_done(struct uv__work* w, int status) {
  function uv_fs_req_cleanup (line 2845) | void uv_fs_req_cleanup(uv_fs_t* req) {
  function uv_fs_open (line 2877) | int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags,
  function uv_fs_close (line 2894) | int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) {
  function uv_fs_read (line 2901) | int uv_fs_read(uv_loop_t* loop,
  function uv_fs_write (line 2934) | int uv_fs_write(uv_loop_t* loop,
  function uv_fs_unlink (line 2967) | int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path,
  function uv_fs_mkdir (line 2982) | int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode,
  function uv_fs_mkdtemp (line 2998) | int uv_fs_mkdtemp(uv_loop_t* loop,
  function uv_fs_mkstemp (line 3015) | int uv_fs_mkstemp(uv_loop_t* loop,
  function uv_fs_rmdir (line 3032) | int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_c...
  function uv_fs_scandir (line 3046) | int uv_fs_scandir(uv_loop_t* loop, uv_fs_t* req, const char* path, int f...
  function uv_fs_opendir (line 3061) | int uv_fs_opendir(uv_loop_t* loop,
  function uv_fs_readdir (line 3076) | int uv_fs_readdir(uv_loop_t* loop,
  function uv_fs_closedir (line 3093) | int uv_fs_closedir(uv_loop_t* loop,
  function uv_fs_link (line 3106) | int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path,
  function uv_fs_symlink (line 3121) | int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path,
  function uv_fs_readlink (line 3137) | int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path,
  function uv_fs_realpath (line 3152) | int uv_fs_realpath(uv_loop_t* loop, uv_fs_t* req, const char* path,
  function uv_fs_chown (line 3173) | int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_...
  function uv_fs_fchown (line 3188) | int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_uid_t uid,
  function uv_fs_lchown (line 3195) | int uv_fs_lchown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid...
  function uv_fs_stat (line 3210) | int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb...
  function uv_fs_lstat (line 3224) | int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_c...
  function uv_fs_fstat (line 3238) | int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) {
  function uv_fs_rename (line 3245) | int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path,
  function uv_fs_fsync (line 3260) | int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb cb) {
  function uv_fs_fdatasync (line 3267) | int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file fd, uv_fs_cb ...
  function uv_fs_ftruncate (line 3274) | int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file fd,
  function uv_fs_copyfile (line 3283) | int uv_fs_copyfile(uv_loop_t* loop,
  function uv_fs_sendfile (line 3311) | int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file fd_out,
  function uv_fs_access (line 3322) | int uv_fs_access(uv_loop_t* loop,
  function uv_fs_chmod (line 3341) | int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode,
  function uv_fs_fchmod (line 3357) | int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file fd, int mode,
  function uv_fs_utime (line 3366) | int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double ...
  function uv_fs_futime (line 3383) | int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file fd, double atime,
  function uv_fs_lutime (line 3392) | int uv_fs_lutime(uv_loop_t* loop, uv_fs_t* req, const char* path, double...
  function uv_fs_statfs (line 3409) | int uv_fs_statfs(uv_loop_t* loop,
  function uv_fs_get_system_error (line 3425) | int uv_fs_get_system_error(const uv_fs_t* req) {

FILE: core/src/lib/3rd/libuv/src/win/getaddrinfo.c
  function uv__getaddrinfo_translate_error (line 35) | int uv__getaddrinfo_translate_error(int sys_err) {
  type ADDRINFOW (line 55) | typedef struct addrinfoW {
  function uv__getaddrinfo_work (line 83) | static void uv__getaddrinfo_work(struct uv__work* w) {
  function uv__getaddrinfo_done (line 105) | static void uv__getaddrinfo_done(struct uv__work* w, int status) {
  function uv_freeaddrinfo (line 236) | void uv_freeaddrinfo(struct addrinfo* ai) {
  function uv_getaddrinfo (line 257) | int uv_getaddrinfo(uv_loop_t* loop,
  function uv_if_indextoname (line 399) | int uv_if_indextoname(unsigned int ifindex, char* buffer, size_t* size) {
  function uv_if_indextoiid (line 445) | int uv_if_indextoiid(unsigned int ifindex, char* buffer, size_t* size) {

FILE: core/src/lib/3rd/libuv/src/win/getnameinfo.c
  function uv__getnameinfo_work (line 41) | static void uv__getnameinfo_work(struct uv__work* w) {
  function uv__getnameinfo_done (line 90) | static void uv__getnameinfo_done(struct uv__work* w, int status) {
  function uv_getnameinfo (line 117) | int uv_getnameinfo(uv_loop_t* loop,

FILE: core/src/lib/3rd/libuv/src/win/handle-inl.h
  function INLINE (line 88) | INLINE static void uv_want_endgame(uv_loop_t* loop, uv_handle_t* handle) {
  function INLINE (line 98) | INLINE static void uv_process_endgames(uv_loop_t* loop) {
  function INLINE (line 166) | INLINE static HANDLE uv__get_osfhandle(int fd)

FILE: core/src/lib/3rd/libuv/src/win/handle.c
  function uv_handle_type (line 31) | uv_handle_type uv_guess_handle(uv_file file) {
  function uv_is_active (line 61) | int uv_is_active(const uv_handle_t* handle) {
  function uv_close (line 67) | void uv_close(uv_handle_t* handle, uv_close_cb cb) {
  function uv_is_closing (line 151) | int uv_is_closing(const uv_handle_t* handle) {
  function uv_os_fd_t (line 156) | uv_os_fd_t uv_get_osfhandle(int fd) {
  function uv_open_osfhandle (line 160) | int uv_open_osfhandle(uv_os_fd_t os_fd) {

FILE: core/src/lib/3rd/libuv/src/win/internal.h
  type uv__ipc_socket_xfer_type_t (line 64) | typedef enum {
  type uv__ipc_socket_xfer_info_t (line 70) | typedef struct {
  type sockaddr (line 275) | struct sockaddr
  type sockaddr (line 279) | struct sockaddr
  type sockaddr (line 319) | struct sockaddr
  type sockaddr_in (line 331) | struct sockaddr_in
  type sockaddr_in6 (line 332) | struct sockaddr_in6

FILE: core/src/lib/3rd/libuv/src/win/loop-watcher.c
  function uv_loop_watcher_endgame (line 29) | void uv_loop_watcher_endgame(uv_loop_t* loop, uv_handle_t* handle) {

FILE: core/src/lib/3rd/libuv/src/win/pipe.c
  type uv__ipc_xfer_queue_item_t (line 55) | typedef struct {
  type uv__ipc_frame_header_t (line 74) | typedef struct {
  type uv__coalesced_write_t (line 87) | typedef struct {
  function uv_unique_pipe_name (line 101) | static void uv_unique_pipe_name(char* ptr, char* name, size_t size) {
  function uv_pipe_init (line 106) | int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) {
  function uv_pipe_connection_init (line 123) | static void uv_pipe_connection_init(uv_pipe_t* handle) {
  function HANDLE (line 135) | static HANDLE open_named_pipe(const WCHAR* name, DWORD* duplex_flags) {
  function close_pipe (line 193) | static void close_pipe(uv_pipe_t* pipe) {
  function uv__pipe_server (line 205) | static int uv__pipe_server(
  function uv__create_pipe_pair (line 245) | static int uv__create_pipe_pair(
  function uv_pipe (line 345) | int uv_pipe(uv_file fds[2], int read_flags, int write_flags) {
  function uv__create_stdio_pipe_pair (line 385) | int uv__create_stdio_pipe_pair(uv_loop_t* loop,
  function uv_set_pipe_handle (line 453) | static int uv_set_pipe_handle(uv_loop_t* loop,
  function pipe_alloc_accept (line 528) | static int pipe_alloc_accept(uv_loop_t* loop, uv_pipe_t* handle,
  function DWORD (line 560) | static DWORD WINAPI pipe_shutdown_thread_proc(void* parameter) {
  function uv_pipe_endgame (line 581) | void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) {
  function uv_pipe_pending_instances (line 713) | void uv_pipe_pending_instances(uv_pipe_t* handle, int count) {
  function uv_pipe_bind (line 722) | int uv_pipe_bind(uv_pipe_t* handle, const char* name) {
  function DWORD (line 803) | static DWORD WINAPI pipe_connect_thread_proc(void* parameter) {
  function uv_pipe_connect (line 842) | void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle,
  function uv__pipe_interrupt_read (line 926) | void uv__pipe_interrupt_read(uv_pipe_t* handle) {
  function uv__pipe_read_stop (line 973) | void uv__pipe_read_stop(uv_pipe_t* handle) {
  function uv_pipe_cleanup (line 983) | void uv_pipe_cleanup(uv_loop_t* loop, uv_pipe_t* handle) {
  function uv_pipe_close (line 1016) | void uv_pipe_close(uv_loop_t* loop, uv_pipe_t* handle) {
  function uv_pipe_queue_accept (line 1038) | static void uv_pipe_queue_accept(uv_loop_t* loop, uv_pipe_t* handle,
  function uv_pipe_accept (line 1074) | int uv_pipe_accept(uv_pipe_t* server, uv_stream_t* client) {
  function uv_pipe_listen (line 1133) | int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb) {
  function DWORD (line 1172) | static DWORD WINAPI uv_pipe_zero_readfile_thread_proc(void* arg) {
  function DWORD (line 1245) | static DWORD WINAPI uv_pipe_writefile_thread_proc(void* parameter) {
  function post_completion_read_wait (line 1272) | static void CALLBACK post_completion_read_wait(void* context, BOOLEAN ti...
  function post_completion_write_wait (line 1291) | static void CALLBACK post_completion_write_wait(void* context, BOOLEAN t...
  function uv_pipe_queue_read (line 1310) | static void uv_pipe_queue_read(uv_loop_t* loop, uv_pipe_t* handle) {
  function uv_pipe_read_start (line 1375) | int uv_pipe_read_start(uv_pipe_t* handle,
  function uv_insert_non_overlapped_write_req (line 1402) | static void uv_insert_non_overlapped_write_req(uv_pipe_t* handle,
  function uv_write_t (line 1417) | static uv_write_t* uv_remove_non_overlapped_write_req(uv_pipe_t* handle) {
  function uv_queue_non_overlapped_write (line 1438) | static void uv_queue_non_overlapped_write(uv_pipe_t* handle) {
  function uv__build_coalesced_write_req (line 1450) | static int uv__build_coalesced_write_req(uv_write_t* user_req,
  function uv__pipe_write_data (line 1510) | static int uv__pipe_write_data(uv_loop_t* loop,
  function DWORD (line 1661) | static DWORD uv__pipe_get_ipc_remote_pid(uv_pipe_t* handle) {
  function uv__pipe_write_ipc (line 1674) | int uv__pipe_write_ipc(uv_loop_t* loop,
  function uv__pipe_write (line 1776) | int uv__pipe_write(uv_loop_t* loop,
  function uv_pipe_read_eof (line 1794) | static void uv_pipe_read_eof(uv_loop_t* loop, uv_pipe_t* handle,
  function uv_pipe_read_error (line 1807) | static void uv_pipe_read_error(uv_loop_t* loop, uv_pipe_t* handle, int e...
  function uv_pipe_read_error_or_eof (line 1819) | static void uv_pipe_read_error_or_eof(uv_loop_t* loop, uv_pipe_t* handle,
  function uv__pipe_queue_ipc_xfer_info (line 1829) | static void uv__pipe_queue_ipc_xfer_info(
  function uv__pipe_read_exactly (line 1850) | static int uv__pipe_read_exactly(HANDLE h, void* buffer, DWORD count) {
  function DWORD (line 1871) | static DWORD uv__pipe_read_data(uv_loop_t* loop,
  function DWORD (line 1906) | static DWORD uv__pipe_read_ipc(uv_loop_t* loop, uv_pipe_t* handle) {
  function uv_process_pipe_read_req (line 1987) | void uv_process_pipe_read_req(uv_loop_t* loop,
  function uv_process_pipe_write_req (line 2054) | void uv_process_pipe_write_req(uv_loop_t* loop, uv_pipe_t* handle,
  function uv_process_pipe_accept_req (line 2108) | void uv_process_pipe_accept_req(uv_loop_t* loop, uv_pipe_t* handle,
  function uv_process_pipe_connect_req (line 2143) | void uv_process_pipe_connect_req(uv_loop_t* loop, uv_pipe_t* handle,
  function uv_process_pipe_shutdown_req (line 2165) | void uv_process_pipe_shutdown_req(uv_loop_t* loop, uv_pipe_t* handle,
  function eof_timer_init (line 2196) | static void eof_timer_init(uv_pipe_t* pipe) {
  function eof_timer_start (line 2211) | static void eof_timer_start(uv_pipe_t* pipe) {
  function eof_timer_stop (line 2220) | static void eof_timer_stop(uv_pipe_t* pipe) {
  function eof_timer_cb (line 2229) | static void eof_timer_cb(uv_timer_t* timer) {
  function eof_timer_destroy (line 2263) | static void eof_timer_destroy(uv_pipe_t* pipe) {
  function eof_timer_close_cb (line 2273) | static void eof_timer_close_cb(uv_handle_t* handle) {
  function uv_pipe_open (line 2279) | int uv_pipe_open(uv_pipe_t* pipe, uv_file file) {
  function uv__pipe_getname (line 2352) | static int uv__pipe_getname(const uv_pipe_t* handle, char* buffer, size_...
  function uv_pipe_pending_count (line 2474) | int uv_pipe_pending_count(uv_pipe_t* handle) {
  function uv_pipe_getsockname (line 2481) | int uv_pipe_getsockname(const uv_pipe_t* handle, char* buffer, size_t* s...
  function uv_pipe_getpeername (line 2495) | int uv_pipe_getpeername(const uv_pipe_t* handle, char* buffer, size_t* s...
  function uv_handle_type (line 2507) | uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle) {
  function uv_pipe_chmod (line 2516) | int uv_pipe_chmod(uv_pipe_t* handle, int mode) {

FILE: core/src/lib/3rd/libuv/src/win/poll.c
  type uv_single_fd_set_t (line 40) | typedef struct uv_single_fd_set_s {
  function uv__init_overlapped_dummy (line 52) | static void uv__init_overlapped_dummy(void) {
  function OVERLAPPED (line 64) | static OVERLAPPED* uv__get_overlapped_dummy(void) {
  function AFD_POLL_INFO (line 70) | static AFD_POLL_INFO* uv__get_afd_poll_info_dummy(void) {
  function uv__fast_poll_submit_poll_req (line 75) | static void uv__fast_poll_submit_poll_req(uv_loop_t* loop, uv_poll_t* ha...
  function uv__fast_poll_process_poll_req (line 137) | static void uv__fast_poll_process_poll_req(uv_loop_t* loop, uv_poll_t* h...
  function SOCKET (line 203) | static SOCKET uv__fast_poll_create_peer_socket(HANDLE iocp,
  function SOCKET (line 236) | static SOCKET uv__fast_poll_get_peer_socket(uv_loop_t* loop,
  function DWORD (line 267) | static DWORD WINAPI uv__slow_poll_thread_proc(void* arg) {
  function uv__slow_poll_submit_poll_req (line 336) | static void uv__slow_poll_submit_poll_req(uv_loop_t* loop, uv_poll_t* ha...
  function uv__slow_poll_process_poll_req (line 366) | static void uv__slow_poll_process_poll_req(uv_loop_t* loop, uv_poll_t* h...
  function uv_poll_init (line 408) | int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd) {
  function uv_poll_init_socket (line 413) | int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle,
  function uv__poll_set (line 486) | static int uv__poll_set(uv_poll_t* handle, int events, uv_poll_cb cb) {
  function uv_poll_start (line 516) | int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb) {
  function uv_poll_stop (line 521) | int uv_poll_stop(uv_poll_t* handle) {
  function uv_process_poll_req (line 526) | void uv_process_poll_req(uv_loop_t* loop, uv_poll_t* handle, uv_req_t* r...
  function uv_poll_close (line 535) | int uv_poll_close(uv_loop_t* loop, uv_poll_t* handle) {
  function uv_poll_endgame (line 576) | void uv_poll_endgame(uv_loop_t* loop, uv_poll_t* handle) {

FILE: core/src/lib/3rd/libuv/src/win/process-stdio.c
  function uv_disable_stdio_inheritance (line 74) | void uv_disable_stdio_inheritance(void) {
  function uv__duplicate_handle (line 98) | static int uv__duplicate_handle(uv_loop_t* loop, HANDLE handle, HANDLE* ...
  function uv__duplicate_fd (line 131) | static int uv__duplicate_fd(uv_loop_t* loop, int fd, HANDLE* dup) {
  function uv__create_nul_handle (line 144) | int uv__create_nul_handle(HANDLE* handle_ptr,
  function uv__stdio_create (line 169) | int uv__stdio_create(uv_loop_t* loop,
  function uv__stdio_destroy (line 357) | void uv__stdio_destroy(BYTE* buffer) {
  function uv__stdio_noinherit (line 372) | void uv__stdio_noinherit(BYTE* buffer) {
  function uv__stdio_verify (line 385) | int uv__stdio_verify(BYTE* buffer, WORD size) {
  function WORD (line 409) | WORD uv__stdio_size(BYTE* buffer) {
  function HANDLE (line 414) | HANDLE uv__stdio_handle(BYTE* buffer, int fd) {

FILE: core/src/lib/3rd/libuv/src/win/process.c
  type env_var_t (line 40) | typedef struct env_var {
  function uv__init_global_job_handle (line 67) | static void uv__init_global_job_handle(void) {
  function uv_utf8_to_utf16_alloc (line 108) | static int uv_utf8_to_utf16_alloc(const char* s, WCHAR** ws_ptr) {
  function uv_process_init (line 140) | static void uv_process_init(uv_loop_t* loop, uv_process_t* handle) {
  function WCHAR (line 162) | static WCHAR* search_path_join_test(const WCHAR* dir,
  function WCHAR (line 255) | static WCHAR* path_search_walk_ext(const WCHAR *dir,
  function WCHAR (line 340) | static WCHAR* search_path(const WCHAR *file,
  function WCHAR (line 453) | WCHAR* quote_cmd_arg(const WCHAR *source, WCHAR *target) {
  function make_program_args (line 526) | int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_p...
  function env_strncmp (line 616) | int env_strncmp(const wchar_t* a, int na, const wchar_t* b) {
  function qsort_wcscmp (line 659) | static int qsort_wcscmp(const void *a, const void *b) {
  function make_program_env (line 682) | int make_program_env(char* env_block[], WCHAR** dst_ptr) {
  function WCHAR (line 831) | static WCHAR* find_path(WCHAR *env) {
  function exit_wait_callback (line 849) | static void CALLBACK exit_wait_callback(void* data, BOOLEAN didTimeout) {
  function uv_process_proc_exit (line 865) | void uv_process_proc_exit(uv_loop_t* loop, uv_process_t* handle) {
  function uv_process_close (line 903) | void uv_process_close(uv_loop_t* loop, uv_process_t* handle) {
  function uv_process_endgame (line 924) | void uv_process_endgame(uv_loop_t* loop, uv_process_t* handle) {
  function uv_spawn (line 936) | int uv_spawn(uv_loop_t* loop,
  function uv__kill (line 1189) | static int uv__kill(HANDLE process_handle, int signum) {
  function uv_process_kill (line 1238) | int uv_process_kill(uv_process_t* process, int signum) {
  function uv_kill (line 1256) | int uv_kill(int pid, int signum) {

FILE: core/src/lib/3rd/libuv/src/win/req-inl.h
  function INLINE (line 85) | INLINE static uv_req_t* uv_overlapped_to_req(OVERLAPPED* overlapped) {
  function INLINE (line 90) | INLINE static void uv_insert_pending_req(uv_loop_t* loop, uv_req_t* req) {
  function INLINE (line 141) | INLINE static int uv_process_reqs(uv_loop_t* loop) {

FILE: core/src/lib/3rd/libuv/src/win/signal.c
  type uv_signal_tree_s (line 32) | struct uv_signal_tree_s
  function uv_signals_init (line 42) | void uv_signals_init(void) {
  function uv__signal_cleanup (line 49) | void uv__signal_cleanup(void) {
  function uv__signal_compare (line 54) | static int uv__signal_compare(uv_signal_t* w1, uv_signal_t* w2) {
  function uv__signal_dispatch (line 80) | int uv__signal_dispatch(int signum) {
  function BOOL (line 116) | static BOOL WINAPI uv__signal_control_handler(DWORD type) {
  function uv_signal_init (line 147) | int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle) {
  function uv_signal_stop (line 160) | int uv_signal_stop(uv_signal_t* handle) {
  function uv_signal_start (line 181) | int uv_signal_start(uv_signal_t* handle, uv_signal_cb signal_cb, int sig...
  function uv_signal_start_oneshot (line 186) | int uv_signal_start_oneshot(uv_signal_t* handle,
  function uv__signal_start (line 193) | int uv__signal_start(uv_signal_t* handle,
  function uv_process_signal_req (line 234) | void uv_process_signal_req(uv_loop_t* loop, uv_signal_t* handle,
  function uv_signal_close (line 262) | void uv_signal_close(uv_loop_t* loop, uv_signal_t* handle) {
  function uv_signal_endgame (line 272) | void uv_signal_endgame(uv_loop_t* loop, uv_signal_t* handle) {

FILE: core/src/lib/3rd/libuv/src/win/snprintf.c
  function snprintf (line 30) | int snprintf(char* buf, size_t len, const char* fmt, ...) {

FILE: core/src/lib/3rd/libuv/src/win/stream-inl.h
  function INLINE (line 33) | INLINE static void uv_stream_init(uv_loop_t* loop,
  function INLINE (line 49) | INLINE static void uv_connection_init(uv_stream_t* handle) {

FILE: core/src/lib/3rd/libuv/src/win/stream.c
  function uv_listen (line 30) | int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb) {
  function uv_accept (line 49) | int uv_accept(uv_stream_t* server, uv_stream_t* client) {
  function uv__read_start (line 68) | int uv__read_start(uv_stream_t* handle,
  function uv_read_stop (line 92) | int uv_read_stop(uv_stream_t* handle) {
  function uv_write (line 112) | int uv_write(uv_write_t* req,
  function uv_write2 (line 144) | int uv_write2(uv_write_t* req,
  function uv_try_write (line 169) | int uv_try_write(uv_stream_t* stream,
  function uv_shutdown (line 191) | int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb ...
  function uv_is_readable (line 216) | int uv_is_readable(const uv_stream_t* handle) {
  function uv_is_writable (line 221) | int uv_is_writable(const uv_stream_t* handle) {
  function uv_stream_set_blocking (line 226) | int uv_stream_set_blocking(uv_stream_t* handle, int blocking) {

FILE: core/src/lib/3rd/libuv/src/win/tcp.c
  function uv__tcp_nodelay (line 48) | static int uv__tcp_nodelay(uv_tcp_t* handle, SOCKET socket, int enable) {
  function uv__tcp_keepalive (line 60) | static int uv__tcp_keepalive(uv_tcp_t* handle, SOCKET socket, int enable...
  function uv_tcp_set_socket (line 81) | static int uv_tcp_set_socket(uv_loop_t* loop,
  function uv_tcp_init_ex (line 154) | int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags) {
  function uv_tcp_init (line 203) | int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle) {
  function uv_tcp_endgame (line 208) | void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) {
  function uv_tcp_try_bind (line 294) | static int uv_tcp_try_bind(uv_tcp_t* handle,
  function post_completion (line 355) | static void CALLBACK post_completion(void* context, BOOLEAN timed_out) {
  function post_write_completion (line 374) | static void CALLBACK post_write_completion(void* context, BOOLEAN timed_...
  function uv_tcp_queue_accept (line 393) | static void uv_tcp_queue_accept(uv_tcp_t* handle, uv_tcp_accept_t* req) {
  function uv_tcp_queue_read (line 477) | static void uv_tcp_queue_read(uv_loop_t* loop, uv_tcp_t* handle) {
  function uv_tcp_close_reset (line 551) | int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb) {
  function uv_tcp_listen (line 566) | int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) {
  function uv_tcp_accept (line 657) | int uv_tcp_accept(uv_tcp_t* server, uv_tcp_t* client) {
  function uv_tcp_read_start (line 726) | int uv_tcp_read_start(uv_tcp_t* handle, uv_alloc_cb alloc_cb,
  function uv__is_loopback (line 751) | static int uv__is_loopback(const struct sockaddr_storage* storage) {
  function uv__is_fast_loopback_fail_supported (line 772) | static int uv__is_fast_loopback_fail_supported() {
  function uv_tcp_try_connect (line 786) | static int uv_tcp_try_connect(uv_connect_t* req,
  function uv_tcp_getsockname (line 886) | int uv_tcp_getsockname(const uv_tcp_t* handle,
  function uv_tcp_getpeername (line 898) | int uv_tcp_getpeername(const uv_tcp_t* handle,
  function uv_tcp_write (line 910) | int uv_tcp_write(uv_loop_t* loop,
  function uv__tcp_try_write (line 977) | int uv__tcp_try_write(uv_tcp_t* handle,
  function uv_process_tcp_read_req (line 1001) | void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle,
  function uv_process_tcp_write_req (line 1129) | void uv_process_tcp_write_req(uv_loop_t* loop, uv_tcp_t* handle,
  function uv_process_tcp_accept_req (line 1170) | void uv_process_tcp_accept_req(uv_loop_t* loop, uv_tcp_t* handle,
  function uv_process_tcp_connect_req (line 1218) | void uv_process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle,
  function uv__tcp_xfer_export (line 1258) | int uv__tcp_xfer_export(uv_tcp_t* handle,
  function uv__tcp_xfer_import (line 1293) | int uv__tcp_xfer_import(uv_tcp_t* tcp,
  function uv_tcp_nodelay (line 1333) | int uv_tcp_nodelay(uv_tcp_t* handle, int enable) {
  function uv_tcp_keepalive (line 1352) | int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay) {
  function uv_tcp_simultaneous_accepts (line 1373) | int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable) {
  function uv_tcp_try_cancel_io (line 1405) | static int uv_tcp_try_cancel_io(uv_tcp_t* tcp) {
  function uv_tcp_close (line 1442) | void uv_tcp_close(uv_loop_t* loop, uv_tcp_t* tcp) {
  function uv_tcp_open (line 1514) | int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock) {
  function uv__tcp_bind (line 1560) | int uv__tcp_bind(uv_tcp_t* handle,
  function uv__tcp_connect (line 1577) | int uv__tcp_connect(uv_connect_t* req,
  function uv_socketpair (line 1597) | int uv_socketpair(int type, int protocol, uv_os_sock_t fds[2], int flags...

FILE: core/src/lib/3rd/libuv/src/win/thread.c
  function uv__once_inner (line 35) | static void uv__once_inner(uv_once_t* guard, void (*callback)(void)) {
  function uv_once (line 67) | void uv_once(uv_once_t* guard, void (*callback)(void)) {
  function uv__init_current_thread_key (line 84) | static void uv__init_current_thread_key(void) {
  type thread_ctx (line 90) | struct thread_ctx {
  function UINT (line 97) | static UINT __stdcall uv__thread_start(void* arg) {
  function uv_thread_create (line 114) | int uv_thread_create(uv_thread_t *tid, void (*entry)(void *arg), void *a...
  function uv_thread_create_ex (line 120) | int uv_thread_create_ex(uv_thread_t* tid,
  function uv_thread_t (line 184) | uv_thread_t uv_thread_self(void) {
  function uv_thread_join (line 190) | int uv_thread_join(uv_thread_t *tid) {
  function uv_thread_equal (line 202) | int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2) {
  function uv_mutex_init (line 207) | int uv_mutex_init(uv_mutex_t* mutex) {
  function uv_mutex_init_recursive (line 213) | int uv_mutex_init_recursive(uv_mutex_t* mutex) {
  function uv_mutex_destroy (line 218) | void uv_mutex_destroy(uv_mutex_t* mutex) {
  function uv_mutex_lock (line 223) | void uv_mutex_lock(uv_mutex_t* mutex) {
  function uv_mutex_trylock (line 228) | int uv_mutex_trylock(uv_mutex_t* mutex) {
  function uv_mutex_unlock (line 236) | void uv_mutex_unlock(uv_mutex_t* mutex) {
  function uv_rwlock_init (line 241) | int uv_rwlock_init(uv_rwlock_t* rwlock) {
  function uv_rwlock_destroy (line 258) | void uv_rwlock_destroy(uv_rwlock_t* rwlock) {
  function uv_rwlock_rdlock (line 264) | void uv_rwlock_rdlock(uv_rwlock_t* rwlock) {
  function uv_rwlock_tryrdlock (line 282) | int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock) {
  function uv_rwlock_rdunlock (line 314) | void uv_rwlock_rdunlock(uv_rwlock_t* rwlock) {
  function uv_rwlock_wrlock (line 326) | void uv_rwlock_wrlock(uv_rwlock_t* rwlock) {
  function uv_rwlock_trywrlock (line 333) | int uv_rwlock_trywrlock(uv_rwlock_t* rwlock) {
  function uv_rwlock_wrunlock (line 344) | void uv_rwlock_wrunlock(uv_rwlock_t* rwlock) {
  function uv_sem_init (line 350) | int uv_sem_init(uv_sem_t* sem, unsigned int value) {
  function uv_sem_destroy (line 359) | void uv_sem_destroy(uv_sem_t* sem) {
  function uv_sem_post (line 365) | void uv_sem_post(uv_sem_t* sem) {
  function uv_sem_wait (line 371) | void uv_sem_wait(uv_sem_t* sem) {
  function uv_sem_trywait (line 377) | int uv_sem_trywait(uv_sem_t* sem) {
  function uv_cond_init (line 391) | int uv_cond_init(uv_cond_t* cond) {
  function uv_cond_destroy (line 397) | void uv_cond_destroy(uv_cond_t* cond) {
  function uv_cond_signal (line 403) | void uv_cond_signal(uv_cond_t* cond) {
  function uv_cond_broadcast (line 408) | void uv_cond_broadcast(uv_cond_t* cond) {
  function uv_cond_wait (line 413) | void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex) {
  function uv_cond_timedwait (line 418) | int uv_cond_timedwait(uv_cond_t* cond, uv_mutex_t* mutex, uint64_t timeo...
  function uv_barrier_init (line 427) | int uv_barrier_init(uv_barrier_t* barrier, unsigned int count) {
  function uv_barrier_destroy (line 456) | void uv_barrier_destroy(uv_barrier_t* barrier) {
  function uv_barrier_wait (line 463) | int uv_barrier_wait(uv_barrier_t* barrier) {
  function uv_key_create (line 490) | int uv_key_create(uv_key_t* key) {
  function uv_key_delete (line 498) | void uv_key_delete(uv_key_t* key) {
  function uv_key_set (line 517) | void uv_key_set(uv_key_t* key, void* value) {

FILE: core/src/lib/3rd/libuv/src/win/tty.c
  type uv__read_console_status_e (line 80) | enum uv__read_console_status_e {
  function uv_console_init (line 166) | void uv_console_init(void) {
  function uv_tty_init (line 190) | int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, uv_file fd, int unused) {
  function uv_tty_capture_initial_style (line 292) | static void uv_tty_capture_initial_style(
  function uv_tty_set_
Copy disabled (too large) Download .json
Condensed preview — 7025 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (69,556K chars).
[
  {
    "path": ".github/workflows/c-cpp.yml",
    "chars": 431,
    "preview": "name: C/C++ CI\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build:\n\n    runs-on: "
  },
  {
    "path": ".gitignore",
    "chars": 539,
    "preview": "# Prerequisites\n*.d\n\n# Object files\n*.o\n*.ko\n*.obj\n*.elf\n\n# Linker output\n*.ilk\n*.map\n*.exp\n\n# Precompiled Headers\n*.gch"
  },
  {
    "path": "LICENSE",
    "chars": 34523,
    "preview": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C)"
  },
  {
    "path": "README.md",
    "chars": 4163,
    "preview": "# luacluster\n\n[![C/C++ CI](https://github.com/surparallel/luacluter/actions/workflows/c-cpp.yml/badge.svg)](https://gith"
  },
  {
    "path": "core/CMakeLists.txt",
    "chars": 5635,
    "preview": "PROJECT(luacluster)\nCMAKE_MINIMUM_REQUIRED(VERSION 2.8.12) \noption ( LUA_USE_LUAJIT \"Use luajit\" ON)\n\nif (MSVC)\nset(CMAK"
  },
  {
    "path": "core/bin/server/assert_sc.lua",
    "chars": 24,
    "preview": "local sc = {}\n\nreturn sc"
  },
  {
    "path": "core/bin/server/bots.bat",
    "chars": 68,
    "preview": "luacluster_d.exe --bots --noudp --inside --btcp2 127.0.0.1 9577 10 1"
  },
  {
    "path": "core/bin/server/bots.sh",
    "chars": 67,
    "preview": "./luacluster --bots --noudp --inside --btcp2 127.0.0.1 9577 500 10\n"
  },
  {
    "path": "core/bin/server/log4j.properties",
    "chars": 559,
    "preview": "log4j.rootLogger=debug, R\n\nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender\nlog4j.appender.stdout.layout=org.apach"
  },
  {
    "path": "core/bin/server/lua/LuaPanda.lua",
    "chars": 135805,
    "preview": "-- Tencent is pleased to support the open source community by making LuaPanda available.\n-- Copyright (C) 2019 THL A29 L"
  },
  {
    "path": "core/bin/server/lua/MemoryReferenceInfo.lua",
    "chars": 38145,
    "preview": "--\n-- Collect memory reference info.\n--\n-- @filename  MemoryReferenceInfo.lua\n-- @author    WangYaoqi\n-- @date      2016"
  },
  {
    "path": "core/bin/server/lua/bigworld.lua",
    "chars": 4513,
    "preview": "--bigworld\nlocal sc = require 'sc'\n---@type Entity\nlocal entity = require(\"entity\")\nlocal entitymng = require(\"entitymng"
  },
  {
    "path": "core/bin/server/lua/bots.lua",
    "chars": 2157,
    "preview": "---@type Entity\nlocal entity = require(\"entity\")\n---@type TcpProxy\nlocal tcpproxy = require(\"tcpproxy\")\nlocal tabtostr ="
  },
  {
    "path": "core/bin/server/lua/client.lua",
    "chars": 3519,
    "preview": "---@type Entity\nlocal entity = require(\"entity\")\n---@type TcpProxy\nlocal tcpproxy = require(\"tcpproxy\")\nlocal sc = requi"
  },
  {
    "path": "core/bin/server/lua/clientmoveplugin.lua",
    "chars": 2412,
    "preview": "--moveplugin\nlocal docker = require(\"docker\")\nlocal int64 = require(\"int64\")\nlocal udpproxy = require 'udpproxy'\nlocal m"
  },
  {
    "path": "core/bin/server/lua/cluster.lua",
    "chars": 1776,
    "preview": "local sc = require(\"sc\")\nlocal redishelp = require(\"redishelp\")\nlocal entitymng = require(\"entitymng\")\nlocal elog = requ"
  },
  {
    "path": "core/bin/server/lua/dbentity.lua",
    "chars": 1862,
    "preview": "---@type Entity\nlocal entity = require(\"entity\")\nlocal int64 = require(\"int64\")\nlocal sc = require(\"sc\")\nlocal json = re"
  },
  {
    "path": "core/bin/server/lua/dbplugin.lua",
    "chars": 2450,
    "preview": "--dbplugin\nlocal int64 = require(\"int64\")\nlocal elog = require(\"eloghelp\")\nlocal entitymng = require(\"entitymng\")\nlocal "
  },
  {
    "path": "core/bin/server/lua/dbsvr.lua",
    "chars": 2253,
    "preview": "--dbsvr\nlocal sc = require 'sc'\nlocal entitymng = require(\"entitymng\")\nlocal elog = require(\"eloghelp\")\nlocal udpproxy ="
  },
  {
    "path": "core/bin/server/lua/dcopy.lua",
    "chars": 536,
    "preview": "-- Lua table deep copy\nlocal dcopy = {}\nfunction dcopy.clone(tDest, tSrc)\n    if next(tSrc) ~= nil  then\n        for key"
  },
  {
    "path": "core/bin/server/lua/dkjson.lua",
    "chars": 22417,
    "preview": "-- Module options:\nlocal always_try_using_lpeg = true\nlocal register_global_module_table = false\nlocal global_module_nam"
  },
  {
    "path": "core/bin/server/lua/dockerrun.lua",
    "chars": 4168,
    "preview": "local sc = require(\"sc\")\n\nlocal LuaPanda = nil\nif sc.LuaPanda.close == 0 then\n    LuaPanda = require(\"LuaPanda\").start(s"
  },
  {
    "path": "core/bin/server/lua/eloghelp.lua",
    "chars": 1229,
    "preview": "local elog = require(\"elog\")\nlocal elogFactory = {}\n\nfunction elogFactory.sys_error(...)\n    elog.sys_error(string.forma"
  },
  {
    "path": "core/bin/server/lua/entity.lua",
    "chars": 12333,
    "preview": "local bit32 = bit32\nif bit32 == nil then\n    bit32 = bit\nend\nlocal dcopy = require(\"dcopy\")\nlocal tabtostr = require(\"ta"
  },
  {
    "path": "core/bin/server/lua/entitymng.lua",
    "chars": 5547,
    "preview": "--我们需要一个管理类,负责将entity工厂创建的entity注册到以剥离应用层的功能\nlocal docker = require(\"docker\")\nlocal elog = require(\"eloghelp\")\nlocal int"
  },
  {
    "path": "core/bin/server/lua/list.lua",
    "chars": 1254,
    "preview": "local List = {}\n\nfunction List.new ()\n    return {first = 0, last = -1}\nend\n\nfunction List.pushleft (list, value)\n    lo"
  },
  {
    "path": "core/bin/server/lua/ltn12.lua",
    "chars": 8177,
    "preview": "-----------------------------------------------------------------------------\n-- LTN12 - Filters, sources, sinks and pum"
  },
  {
    "path": "core/bin/server/lua/mime.lua",
    "chars": 2433,
    "preview": "-----------------------------------------------------------------------------\n-- MIME support for the Lua language.\n-- A"
  },
  {
    "path": "core/bin/server/lua/moveplugin.lua",
    "chars": 2891,
    "preview": "--moveplugin\nlocal docker = require(\"docker\")\nlocal int64 = require(\"int64\")\n---@type UdpProxyList\nlocal udpproxylist = "
  },
  {
    "path": "core/bin/server/lua/msgpack.lua",
    "chars": 9859,
    "preview": "--[[----------------------------------------------------------------------------\n\n  MessagePack encoder / decoder writte"
  },
  {
    "path": "core/bin/server/lua/npc.lua",
    "chars": 1519,
    "preview": "---@type Entity\nlocal entity = require(\"entity\")\nlocal sc = require(\"sc\")\nlocal docker = require(\"docker\")\nlocal int64 ="
  },
  {
    "path": "core/bin/server/lua/profiler.lua",
    "chars": 19938,
    "preview": "--[[\n\n== Introduction ==\n\n  Note that this requires os.clock(), debug.sethook(),\n  and debug.getinfo() or your equivalen"
  },
  {
    "path": "core/bin/server/lua/redis.lua",
    "chars": 37411,
    "preview": "local redis = {\n    _VERSION     = 'redis-lua 2.0.5-dev',\n    _DESCRIPTION = 'A Lua client library for the redis key val"
  },
  {
    "path": "core/bin/server/lua/redishelp.lua",
    "chars": 125,
    "preview": "local sc = require(\"sc\")\nlocal redis = require 'redis'\nlocal client = redis.connect(sc.redis.ip, sc.redis.port)\nreturn c"
  },
  {
    "path": "core/bin/server/lua/sc.lua",
    "chars": 2154,
    "preview": "--system config\nlocal dcopy = require \"dcopy\"\nlocal try = require(\"try-catch-finally\")\nlocal elog = require(\"eloghelp\")\n"
  },
  {
    "path": "core/bin/server/lua/socket/ftp.lua",
    "chars": 9120,
    "preview": "-----------------------------------------------------------------------------\n-- FTP support for the Lua language\n-- Lua"
  },
  {
    "path": "core/bin/server/lua/socket/http.lua",
    "chars": 12193,
    "preview": "-----------------------------------------------------------------------------\n-- HTTP/1.1 client support for the Lua lan"
  },
  {
    "path": "core/bin/server/lua/socket/smtp.lua",
    "chars": 7961,
    "preview": "-----------------------------------------------------------------------------\n-- SMTP client support for the Lua languag"
  },
  {
    "path": "core/bin/server/lua/socket/tp.lua",
    "chars": 3608,
    "preview": "-----------------------------------------------------------------------------\n-- Unified SMTP/FTP subsystem\n-- LuaSocket"
  },
  {
    "path": "core/bin/server/lua/socket/url.lua",
    "chars": 10529,
    "preview": "-----------------------------------------------------------------------------\n-- URI parsing, composition and relative U"
  },
  {
    "path": "core/bin/server/lua/socket.lua",
    "chars": 4068,
    "preview": "-----------------------------------------------------------------------------\n-- LuaSocket helper module\n-- Author: Dieg"
  },
  {
    "path": "core/bin/server/lua/space.lua",
    "chars": 2607,
    "preview": "--space\n---@type Entity\nlocal entity = require(\"entity\")\nlocal entitymng = require(\"entitymng\")\nlocal cmsgpack = require"
  },
  {
    "path": "core/bin/server/lua/spaceplugin.lua",
    "chars": 9269,
    "preview": "--spaceplugin\nlocal sc = require 'sc'\nlocal entitymng = require(\"entitymng\")\nlocal docker = require(\"docker\")\nlocal int6"
  },
  {
    "path": "core/bin/server/lua/spaceproxy.lua",
    "chars": 1259,
    "preview": "--spaceproxy\nlocal elog = require(\"eloghelp\")\nlocal cmsgpack = require(\"cmsgpack\")\nlocal docker = require(\"docker\")\nloca"
  },
  {
    "path": "core/bin/server/lua/strpath.lua",
    "chars": 569,
    "preview": "local strpath = {}\n--获取路径\nfunction strpath.stripfilename(filename)  \n    return string.match(filename, \"(.+)/[^/]*%.%w+$"
  },
  {
    "path": "core/bin/server/lua/sudoku.lua",
    "chars": 2313,
    "preview": "--space_sudoku\nlocal sc = require 'sc'\n---@type Entity\nlocal entity = require(\"entity\")\nlocal entitymng = require(\"entit"
  },
  {
    "path": "core/bin/server/lua/sudokuex.lua",
    "chars": 3122,
    "preview": "--space_sudoku\nlocal sc = require 'sc'\n---@type Entity\nlocal entity = require(\"entity\")\nlocal entitymng = require(\"entit"
  },
  {
    "path": "core/bin/server/lua/tabtostr.lua",
    "chars": 2923,
    "preview": "\nlocal tabtostrObj = {}\n------ 把table转成string\n-- sign 打印在最前面的一个标记\n-- tab 待处理table\n-- showAddress 是否显示table的地址\nfunction t"
  },
  {
    "path": "core/bin/server/lua/tcpproxy.lua",
    "chars": 1358,
    "preview": "local elog = require(\"eloghelp\")\nlocal cmsgpack = require(\"cmsgpack\")\nlocal docker = require(\"docker\")\n\n---@class TcpPro"
  },
  {
    "path": "core/bin/server/lua/test-allmongo.lua",
    "chars": 1343,
    "preview": "test = {\n\turi = 'mongodb://127.0.0.1',\n\tdbname = 'lua-mongo-test',\n\tcollname = 'test',\n\tfilename = 'lua-mongo-test-file'"
  },
  {
    "path": "core/bin/server/lua/test-bson.lua",
    "chars": 6896,
    "preview": "local mongo = require 'mongo'\nlocal BSON = mongo.BSON\n\nlocal testInt64 = math.maxinteger and math.maxinteger == 92233720"
  },
  {
    "path": "core/bin/server/lua/test-gridfs.lua",
    "chars": 4242,
    "preview": "local mongo = require 'mongo'\nlocal client = mongo.Client(test.uri)\nlocal gridfs = assert(client:getGridFS(test.dbname))"
  },
  {
    "path": "core/bin/server/lua/test-mongo.lua",
    "chars": 7153,
    "preview": "local mongo = require 'mongo'\nlocal client = mongo.Client(test.uri)\n\n-- Read prefs\nlocal prefs = mongo.ReadPrefs('primar"
  },
  {
    "path": "core/bin/server/lua/test_entity/myEntity.lua",
    "chars": 310,
    "preview": "---@class MyEntity\nlocal myEntity = class(\"parant\", \"parant2\")\n\nmyEntity:SetKeyFlags(1, \"a\")\nmyEntity.a = {\"f\", \"h\",{\"l\""
  },
  {
    "path": "core/bin/server/lua/test_entity/parant.lua",
    "chars": 288,
    "preview": "---@class Parant\nlocal parant = class(\"parant3\")\n\nparant.cc = {}\n\nfunction parant.OnFreshKey(t,k,v,o,f)\n    print(\"OnFre"
  },
  {
    "path": "core/bin/server/lua/test_entity/parant2.lua",
    "chars": 247,
    "preview": "---@class Parant2\nlocal parant2 = class()\n\nfunction parant2.OnFreshKey(t,k,v,o,f)\n    print(\"OnFreshKey\")\nend\n\nfunction "
  },
  {
    "path": "core/bin/server/lua/test_entity/parant3.lua",
    "chars": 247,
    "preview": "---@class Parant3\nlocal parant3 = class()\n\nfunction parant3.OnFreshKey(t,k,v,o,f)\n    print(\"OnFreshKey\")\nend\n\nfunction "
  },
  {
    "path": "core/bin/server/lua/test_entity/test_myEntity.lua",
    "chars": 312,
    "preview": "package.path = package.path .. \";./test_entity/?.lua\"\nlocal json = require(\"dkjson\")\nlocal msgpack = require \"msgpack\"\nr"
  },
  {
    "path": "core/bin/server/lua/test_list.lua",
    "chars": 145,
    "preview": "local list = require 'list'\n\nlocal mylist = list.new()\n\nfor i= 0, 10 do\n    list.pushright(mylist, i)\nend\n\nlist.Insert(m"
  },
  {
    "path": "core/bin/server/lua/test_lua.lua",
    "chars": 63,
    "preview": "\nlocal b = \"hello\"\nlocal a = 9999\nlocal t = {[b] = b}\n\nprint(t)"
  },
  {
    "path": "core/bin/server/lua/tools.lua",
    "chars": 327,
    "preview": "\nlocal tools = {}\n\n--获取准确小数\n-- num 源数字\n--n 位数\nfunction tools.GetPreciseDecimal(num, n)\n    if\ttype(num) ~= \"number\" then"
  },
  {
    "path": "core/bin/server/lua/try-catch-finally.lua",
    "chars": 1575,
    "preview": "local functionType = \"function\"\nlocal istry = 1 --关闭或开启try\n--- \n-- @param tryBlock The block of code to execute as the t"
  },
  {
    "path": "core/bin/server/lua/ttry-catch.lua",
    "chars": 448,
    "preview": "local try = require \"try-catch-finally\"\n\nlocal object\n\ntry(function()\n    try(function()\n        object = Object()\n     "
  },
  {
    "path": "core/bin/server/lua/udpproxy.lua",
    "chars": 1177,
    "preview": "local elog = require(\"eloghelp\")\nlocal cmsgpack = require(\"cmsgpack\")\nlocal docker = require(\"docker\")\n\n---@class UdpPro"
  },
  {
    "path": "core/bin/server/lua/udpproxylist.lua",
    "chars": 1200,
    "preview": "local elog = require(\"eloghelp\")\nlocal cmsgpack = require(\"cmsgpack\")\nlocal docker = require(\"docker\")\n\n---@class UdpPro"
  },
  {
    "path": "core/bin/server/redis.bat",
    "chars": 35,
    "preview": "redis-server.exe redis.windows.conf"
  },
  {
    "path": "core/bin/server/redis.windows-service.conf",
    "chars": 47164,
    "preview": "# Redis configuration file example\n\n# Note on units: when memory size is needed, it is possible to specify\n# it in the u"
  },
  {
    "path": "core/bin/server/redis.windows.conf",
    "chars": 47152,
    "preview": "# Redis configuration file example\n\n# Note on units: when memory size is needed, it is possible to specify\n# it in the u"
  },
  {
    "path": "core/bin/server/test.json",
    "chars": 4030,
    "preview": "[\n  {\n    \"comment\": \"4.1. add with missing object\",\n    \"doc\": { \"q\": { \"bar\": 2 } },\n    \"patch\": [ {\"op\": \"add\", \"pat"
  },
  {
    "path": "core/res/server/config_defaults.json",
    "chars": 389,
    "preview": "{\n  \"log_config\": {\n    \"ruleDefault\": {\n\n    }\n  },\n  \"base_config\": {\n    \"inside\": 1\n  },\n  \"docke_config\":{\n    \"doc"
  },
  {
    "path": "core/src/lib/3rd/3dmath/CMakeLists.txt",
    "chars": 86,
    "preview": "AUX_SOURCE_DIRECTORY(. DIR_TEST1_SRCS)\nADD_LIBRARY ( 3dmath  STATIC ${DIR_TEST1_SRCS})"
  },
  {
    "path": "core/src/lib/3rd/3dmath/box.c",
    "chars": 184,
    "preview": "\n#include \"box.h\"\n\nvoid boxOffset(struct Box* box, struct Vector3* by, struct Box* result) {\n    vector3Add(&box->min, b"
  },
  {
    "path": "core/src/lib/3rd/3dmath/box.h",
    "chars": 189,
    "preview": "\n#ifndef _MATH_BOX_H\n#define _MATH_BOX_H\n\n#include \"vector.h\"\n\nstruct Box {\n    struct Vector3 min, max;\n};\n\nvoid boxOff"
  },
  {
    "path": "core/src/lib/3rd/3dmath/mathf.c",
    "chars": 782,
    "preview": "\n#include \"mathf.h\"\n#include <math.h>\n\nunsigned int gRandomSeed = 1;\n\nint randomInt() {\n    gRandomSeed = gRandomSeed * "
  },
  {
    "path": "core/src/lib/3rd/3dmath/mathf.h",
    "chars": 265,
    "preview": "\n#ifndef _MATH_MATHF_H\n#define _MATH_MATHF_H\n\nint randomInt();\n\nfloat fsign(float in);\nfloat mathfLerp(float from, float"
  },
  {
    "path": "core/src/lib/3rd/3dmath/matrix4.c",
    "chars": 4414,
    "preview": "#include <math.h>\n#include <float.h>\n#include \"vector.h\"\n#include \"matrix4.h\"\n#include \"mathf.h\"\n#include \"quaternion.h\""
  },
  {
    "path": "core/src/lib/3rd/3dmath/matrix4.h",
    "chars": 378,
    "preview": "\n\nstruct Matrix4 {\n    union {\n        float el_4[4][4];\n        float el_16[16];\n    };\n};\n\n#define MATRIX4F_IDENTITY(N"
  },
  {
    "path": "core/src/lib/3rd/3dmath/plane.c",
    "chars": 2153,
    "preview": "\n#include \"plane.h\"\n\nvoid planeFromNormalPoint(struct Vector3* normal, struct Vector3* point, struct Plane* out) {\n    o"
  },
  {
    "path": "core/src/lib/3rd/3dmath/plane.h",
    "chars": 793,
    "preview": "\n#ifndef _MATH_PLANE_H\n#define _MATH_PLANE_H\n\n#include <math.h>\n#include \"vector.h\"\n#include \"box.h\"\n\n/**\n * ax + by + c"
  },
  {
    "path": "core/src/lib/3rd/3dmath/quaternion.c",
    "chars": 8085,
    "preview": "\n#include <math.h>\n#include <float.h>\n#include \"matrix4.h\"\n#include \"quaternion.h\"\n#include \"mathf.h\"\n\n//https://quatern"
  },
  {
    "path": "core/src/lib/3rd/3dmath/quaternion.h",
    "chars": 1542,
    "preview": "\n#ifndef _QUATERNION_H\n#define _QUATERNION_H\n\n#include \"vector.h\"\n#include \"vector2.h\"\n\n//Ƕתȣ /180Ƕ  ȱǶȣ180/С\n#undef PI\n"
  },
  {
    "path": "core/src/lib/3rd/3dmath/ray.c",
    "chars": 635,
    "preview": "\n#include \"ray.h\"\n\nvoid rayProjectOnto(struct Vector3* origin, struct Vector3* dir, struct Vector3* point, struct Vector"
  },
  {
    "path": "core/src/lib/3rd/3dmath/ray.h",
    "chars": 287,
    "preview": "\n#ifndef _MATH_RAY_H\n#define _MATH_RAY_H\n\n#include \"vector.h\"\n\nvoid rayProjectOnto(struct Vector3* origin, struct Vector"
  },
  {
    "path": "core/src/lib/3rd/3dmath/transform.c",
    "chars": 2721,
    "preview": "\n#include \"transform.h\"\n\n\nvoid transformConcat(struct BasicTransform* a, struct BasicTransform* b, struct BasicTransform"
  },
  {
    "path": "core/src/lib/3rd/3dmath/transform.h",
    "chars": 1040,
    "preview": "\n#ifndef _MATH_BASICTRANSFORM_H\n#define _MATH_BASICTRANSFORM_H\n\n#include \"quaternion.h\"\n#include \"vector.h\"\n\nstruct Basi"
  },
  {
    "path": "core/src/lib/3rd/3dmath/vector.c",
    "chars": 3315,
    "preview": "\n#include \"vector.h\"\n#include <math.h>\n\nstruct Vector3 gRight = {1.0f, 0.0f, 0.0f};\nstruct Vector3 gUp = {0.0f, 1.0f, 0."
  },
  {
    "path": "core/src/lib/3rd/3dmath/vector.h",
    "chars": 1418,
    "preview": "\n#ifndef _VECTOR_H\n#define _VECTOR_H\n\nstruct Vector3 {\n    union {\n        struct {\n            float x, y, z;\n        }"
  },
  {
    "path": "core/src/lib/3rd/3dmath/vector2.c",
    "chars": 1371,
    "preview": "\n#include \"vector2.h\"\n#include <math.h>\n\nstruct Vector2 gRight2 = {1.0f, 0.0f};\nstruct Vector2 gUp2 = {0.0f, 1.0f};\n\nvoi"
  },
  {
    "path": "core/src/lib/3rd/3dmath/vector2.h",
    "chars": 678,
    "preview": "\n#ifndef _MATH_VECTOR2_H\n#define _MATH_VECTOR2_H\n\nstruct Vector2 {\n    union {\n        struct {\n            float x, y;\n"
  },
  {
    "path": "core/src/lib/3rd/hiredis/.github/workflows/build.yml",
    "chars": 5016,
    "preview": "name: Build and test\non: [push, pull_request]\n\njobs:\n  ubuntu:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Check"
  },
  {
    "path": "core/src/lib/3rd/hiredis/.gitignore",
    "chars": 84,
    "preview": "/hiredis-test\n/examples/hiredis-example*\n/*.o\n/*.so\n/*.dylib\n/*.a\n/*.pc\n*.dSYM\ntags\n"
  },
  {
    "path": "core/src/lib/3rd/hiredis/.travis.yml",
    "chars": 3242,
    "preview": "language: c\ncompiler:\n  - gcc\n  - clang\n\nos:\n  - linux\n  - osx\n\ndist: bionic\n\nbranches:\n  only:\n    - staging\n    - tryi"
  },
  {
    "path": "core/src/lib/3rd/hiredis/CHANGELOG.md",
    "chars": 24539,
    "preview": "## [1.0.2](https://github.com/redis/hiredis/tree/v1.0.2) - (2021-10-07)\n\nAnnouncing Hiredis v1.0.2, which fixes CVE-2021"
  },
  {
    "path": "core/src/lib/3rd/hiredis/CMakeLists.txt",
    "chars": 8259,
    "preview": "CMAKE_MINIMUM_REQUIRED(VERSION 3.4.0)\nINCLUDE(GNUInstallDirs)\nPROJECT(hiredis)\n\nOPTION(ENABLE_SSL \"Build hiredis_ssl for"
  },
  {
    "path": "core/src/lib/3rd/hiredis/COPYING",
    "chars": 1588,
    "preview": "Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\nCopyright (c) 2010-2011, Pieter Noordhuis <pcno"
  },
  {
    "path": "core/src/lib/3rd/hiredis/Makefile",
    "chars": 11740,
    "preview": "# Hiredis Makefile\n# Copyright (C) 2010-2011 Salvatore Sanfilippo <antirez at gmail dot com>\n# Copyright (C) 2010-2011 P"
  },
  {
    "path": "core/src/lib/3rd/hiredis/README.md",
    "chars": 28530,
    "preview": "\n[![Build Status](https://github.com/redis/hiredis/actions/workflows/build.yml/badge.svg)](https://github.com/redis/hire"
  },
  {
    "path": "core/src/lib/3rd/hiredis/adapters/ae.h",
    "chars": 4271,
    "preview": "/*\n * Copyright (c) 2010-2011, Pieter Noordhuis <pcnoordhuis at gmail dot com>\n *\n * All rights reserved.\n *\n * Redistri"
  },
  {
    "path": "core/src/lib/3rd/hiredis/adapters/glib.h",
    "chars": 3854,
    "preview": "#ifndef __HIREDIS_GLIB_H__\n#define __HIREDIS_GLIB_H__\n\n#include <glib.h>\n\n#include \"../hiredis.h\"\n#include \"../async.h\"\n"
  },
  {
    "path": "core/src/lib/3rd/hiredis/adapters/ivykis.h",
    "chars": 2327,
    "preview": "#ifndef __HIREDIS_IVYKIS_H__\n#define __HIREDIS_IVYKIS_H__\n#include <iv.h>\n#include \"../hiredis.h\"\n#include \"../async.h\"\n"
  },
  {
    "path": "core/src/lib/3rd/hiredis/adapters/libev.h",
    "chars": 5498,
    "preview": "/*\n * Copyright (c) 2010-2011, Pieter Noordhuis <pcnoordhuis at gmail dot com>\n *\n * All rights reserved.\n *\n * Redistri"
  },
  {
    "path": "core/src/lib/3rd/hiredis/adapters/libevent.h",
    "chars": 5601,
    "preview": "/*\n * Copyright (c) 2010-2011, Pieter Noordhuis <pcnoordhuis at gmail dot com>\n *\n * All rights reserved.\n *\n * Redistri"
  },
  {
    "path": "core/src/lib/3rd/hiredis/adapters/libuv.h",
    "chars": 2580,
    "preview": "#ifndef __HIREDIS_LIBUV_H__\n#define __HIREDIS_LIBUV_H__\n#include <stdlib.h>\n#include <uv.h>\n#include \"../hiredis.h\"\n#inc"
  },
  {
    "path": "core/src/lib/3rd/hiredis/adapters/macosx.h",
    "chars": 3870,
    "preview": "//\n//  Created by Дмитрий Бахвалов on 13.07.15.\n//  Copyright (c) 2015 Dmitry Bakhvalov. All rights reserved.\n//\n\n#ifnde"
  },
  {
    "path": "core/src/lib/3rd/hiredis/adapters/qt.h",
    "chars": 4233,
    "preview": "/*-\n * Copyright (C) 2014 Pietro Cerutti <gahr@gahr.ch>\n *\n * Redistribution and use in source and binary forms, with or"
  },
  {
    "path": "core/src/lib/3rd/hiredis/alloc.c",
    "chars": 2928,
    "preview": "/*\n * Copyright (c) 2020, Michael Grunder <michael dot grunder at gmail dot com>\n *\n * All rights reserved.\n *\n * Redist"
  },
  {
    "path": "core/src/lib/3rd/hiredis/alloc.h",
    "chars": 3130,
    "preview": "/*\n * Copyright (c) 2020, Michael Grunder <michael dot grunder at gmail dot com>\n *\n * All rights reserved.\n *\n * Redist"
  },
  {
    "path": "core/src/lib/3rd/hiredis/appveyor.yml",
    "chars": 743,
    "preview": "# Appveyor configuration file for CI build of hiredis on Windows (under Cygwin)\nenvironment:\n    matrix:\n        - CYG_B"
  },
  {
    "path": "core/src/lib/3rd/hiredis/async.c",
    "chars": 29307,
    "preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
  },
  {
    "path": "core/src/lib/3rd/hiredis/async.h",
    "chars": 6027,
    "preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
  },
  {
    "path": "core/src/lib/3rd/hiredis/async_private.h",
    "chars": 3368,
    "preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
  },
  {
    "path": "core/src/lib/3rd/hiredis/dict.c",
    "chars": 10650,
    "preview": "/* Hash table implementation.\n *\n * This file implements in memory hash tables with insert/del/replace/find/\n * get-rand"
  },
  {
    "path": "core/src/lib/3rd/hiredis/dict.h",
    "chars": 4650,
    "preview": "/* Hash table implementation.\n *\n * This file implements in memory hash tables with insert/del/replace/find/\n * get-rand"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/CMakeLists.txt",
    "chars": 1327,
    "preview": "INCLUDE(FindPkgConfig)\n# Check for GLib\n\nPKG_CHECK_MODULES(GLIB2 glib-2.0)\nif (GLIB2_FOUND)\n    INCLUDE_DIRECTORIES(${GL"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-ae.c",
    "chars": 1583,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-glib.c",
    "chars": 1632,
    "preview": "#include <stdlib.h>\n\n#include <hiredis.h>\n#include <async.h>\n#include <adapters/glib.h>\n\nstatic GMainLoop *mainloop;\n\nst"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-ivykis.c",
    "chars": 1440,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-libev.c",
    "chars": 1427,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-libevent-ssl.c",
    "chars": 2322,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <hiredis_s"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-libevent.c",
    "chars": 1750,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-libuv.c",
    "chars": 1468,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n\n#include <hiredis.h>\n#include <async.h>\n"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-macosx.c",
    "chars": 1639,
    "preview": "//\n//  Created by Дмитрий Бахвалов on 13.07.15.\n//  Copyright (c) 2015 Dmitry Bakhvalov. All rights reserved.\n//\n\n#inclu"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-push.c",
    "chars": 6009,
    "preview": "/*\n * Copyright (c) 2020, Michael Grunder <michael dot grunder at gmail dot com>\n *\n * All rights reserved.\n *\n * Redist"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-qt.cpp",
    "chars": 1047,
    "preview": "#include <iostream>\nusing namespace std;\n\n#include <QCoreApplication>\n#include <QTimer>\n\n#include \"example-qt.h\"\n\nvoid g"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-qt.h",
    "chars": 620,
    "preview": "#ifndef __HIREDIS_EXAMPLE_QT_H\n#define __HIREDIS_EXAMPLE_QT_H\n\n#include <adapters/qt.h>\n\nclass ExampleQt : public QObjec"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example-ssl.c",
    "chars": 3156,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include <hiredis.h>\n#include <hiredis_ssl.h>\n\n#ifdef _MSC_V"
  },
  {
    "path": "core/src/lib/3rd/hiredis/examples/example.c",
    "chars": 2666,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <hiredis.h>\n\n#ifdef _MSC_VER\n#include <winsock2.h> /"
  },
  {
    "path": "core/src/lib/3rd/hiredis/fmacros.h",
    "chars": 225,
    "preview": "#ifndef __HIREDIS_FMACRO_H\n#define __HIREDIS_FMACRO_H\n\n#define _XOPEN_SOURCE 600\n#define _POSIX_C_SOURCE 200112L\n\n#if de"
  },
  {
    "path": "core/src/lib/3rd/hiredis/fuzzing/format_command_fuzzer.c",
    "chars": 2253,
    "preview": "/*\n * Copyright (c) 2020, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2020, Pieter Noordhuis <pcnoo"
  },
  {
    "path": "core/src/lib/3rd/hiredis/hiredis-config.cmake.in",
    "chars": 308,
    "preview": "@PACKAGE_INIT@\n\nset_and_check(hiredis_INCLUDEDIR \"@PACKAGE_INCLUDE_INSTALL_DIR@\")\n\nIF (NOT TARGET hiredis::hiredis)\n\tINC"
  },
  {
    "path": "core/src/lib/3rd/hiredis/hiredis.c",
    "chars": 35998,
    "preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2014, Pieter Noordh"
  },
  {
    "path": "core/src/lib/3rd/hiredis/hiredis.h",
    "chars": 13001,
    "preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2014, Pieter Noordh"
  },
  {
    "path": "core/src/lib/3rd/hiredis/hiredis.pc.in",
    "chars": 369,
    "preview": "prefix=@CMAKE_INSTALL_PREFIX@\ninstall_libdir=@CMAKE_INSTALL_LIBDIR@\nexec_prefix=${prefix}\nlibdir=${exec_prefix}/${instal"
  },
  {
    "path": "core/src/lib/3rd/hiredis/hiredis.targets",
    "chars": 522,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "core/src/lib/3rd/hiredis/hiredis_ssl-config.cmake.in",
    "chars": 340,
    "preview": "@PACKAGE_INIT@\n\nset_and_check(hiredis_ssl_INCLUDEDIR \"@PACKAGE_INCLUDE_INSTALL_DIR@\")\n\nIF (NOT TARGET hiredis::hiredis_s"
  },
  {
    "path": "core/src/lib/3rd/hiredis/hiredis_ssl.h",
    "chars": 4832,
    "preview": "\n/*\n * Copyright (c) 2019, Redis Labs\n *\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms"
  },
  {
    "path": "core/src/lib/3rd/hiredis/hiredis_ssl.pc.in",
    "chars": 306,
    "preview": "prefix=@CMAKE_INSTALL_PREFIX@\nexec_prefix=${prefix}\nlibdir=${exec_prefix}/lib\nincludedir=${prefix}/include\npkgincludedir"
  },
  {
    "path": "core/src/lib/3rd/hiredis/net.c",
    "chars": 19138,
    "preview": "/* Extracted from anet.c to work properly with Hiredis error reporting.\n *\n * Copyright (c) 2009-2011, Salvatore Sanfili"
  },
  {
    "path": "core/src/lib/3rd/hiredis/net.h",
    "chars": 2762,
    "preview": "/* Extracted from anet.c to work properly with Hiredis error reporting.\n *\n * Copyright (c) 2009-2011, Salvatore Sanfili"
  },
  {
    "path": "core/src/lib/3rd/hiredis/read.c",
    "chars": 23277,
    "preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
  },
  {
    "path": "core/src/lib/3rd/hiredis/read.h",
    "chars": 4918,
    "preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
  },
  {
    "path": "core/src/lib/3rd/hiredis/sds.c",
    "chars": 40274,
    "preview": "/* SDSLib 2.0 -- A C dynamic strings library\n *\n * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot c"
  },
  {
    "path": "core/src/lib/3rd/hiredis/sds.h",
    "chars": 9253,
    "preview": "/* SDSLib 2.0 -- A C dynamic strings library\n *\n * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot c"
  },
  {
    "path": "core/src/lib/3rd/hiredis/sdsalloc.h",
    "chars": 2121,
    "preview": "/* SDSLib 2.0 -- A C dynamic strings library\n *\n * Copyright (c) 2006-2015, Salvatore Sanfilippo <antirez at gmail dot c"
  },
  {
    "path": "core/src/lib/3rd/hiredis/sockcompat.c",
    "chars": 8972,
    "preview": "/*\n * Copyright (c) 2019, Marcus Geelnard <m at bitsnbites dot eu>\n *\n * All rights reserved.\n *\n * Redistribution and u"
  },
  {
    "path": "core/src/lib/3rd/hiredis/sockcompat.h",
    "chars": 4329,
    "preview": "/*\n * Copyright (c) 2019, Marcus Geelnard <m at bitsnbites dot eu>\n *\n * All rights reserved.\n *\n * Redistribution and u"
  },
  {
    "path": "core/src/lib/3rd/hiredis/ssl.c",
    "chars": 15957,
    "preview": "/*\n * Copyright (c) 2009-2011, Salvatore Sanfilippo <antirez at gmail dot com>\n * Copyright (c) 2010-2011, Pieter Noordh"
  },
  {
    "path": "core/src/lib/3rd/hiredis/test.c",
    "chars": 55286,
    "preview": "#include \"fmacros.h\"\n#include \"sockcompat.h\"\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#ifndef _WIN32\n#"
  },
  {
    "path": "core/src/lib/3rd/hiredis/test.sh",
    "chars": 2009,
    "preview": "#!/bin/sh -ue\n\nREDIS_SERVER=${REDIS_SERVER:-redis-server}\nREDIS_PORT=${REDIS_PORT:-56379}\nREDIS_SSL_PORT=${REDIS_SSL_POR"
  },
  {
    "path": "core/src/lib/3rd/hiredis/win32.h",
    "chars": 1042,
    "preview": "#ifndef _WIN32_HELPER_INCLUDE\n#define _WIN32_HELPER_INCLUDE\n#ifdef _MSC_VER\n\n#include <winsock2.h> /* for struct timeval"
  },
  {
    "path": "core/src/lib/3rd/libuv/.gitattributes",
    "chars": 42,
    "preview": "test/fixtures/lorem_ipsum.txt text eol=lf\n"
  },
  {
    "path": "core/src/lib/3rd/libuv/.mailmap",
    "chars": 2824,
    "preview": "A. Hauptmann <andreashauptmann@t-online.de>\nAaron Bieber <qbit@deftly.net> <deftly@gmail.com>\nAlan Gutierrez <alan@prett"
  },
  {
    "path": "core/src/lib/3rd/libuv/AUTHORS",
    "chars": 17073,
    "preview": "# Authors ordered by first contribution.\nRyan Dahl <ryan@joyent.com>\nBert Belder <bertbelder@gmail.com>\nJosh Roesslein <"
  },
  {
    "path": "core/src/lib/3rd/libuv/CMakeLists.txt",
    "chars": 21666,
    "preview": "cmake_minimum_required(VERSION 3.4)\nproject(libuv LANGUAGES C)\n\ncmake_policy(SET CMP0057 NEW) # Enable IN_LIST operator\n"
  },
  {
    "path": "core/src/lib/3rd/libuv/CONTRIBUTING.md",
    "chars": 5730,
    "preview": "# CONTRIBUTING\n\nThe libuv project welcomes new contributors. This document will guide you\nthrough the process.\n\n\n### FOR"
  },
  {
    "path": "core/src/lib/3rd/libuv/ChangeLog",
    "chars": 150554,
    "preview": "2021.07.08, Version 1.41.1 (Stable)\n\nChanges since version 1.41.0:\n\n* idna: fix OOB read in punycode decoder (Ben Noordh"
  },
  {
    "path": "core/src/lib/3rd/libuv/LICENSE",
    "chars": 3142,
    "preview": "libuv is licensed for use as follows:\n\n====\nCopyright (c) 2015-present libuv project contributors.\n\nPermission is hereby"
  },
  {
    "path": "core/src/lib/3rd/libuv/LICENSE-docs",
    "chars": 18648,
    "preview": "Attribution 4.0 International\n\n=======================================================================\n\nCreative Commons"
  },
  {
    "path": "core/src/lib/3rd/libuv/MAINTAINERS.md",
    "chars": 2294,
    "preview": "\n# Project Maintainers\n\nlibuv is currently managed by the following individuals:\n\n* **Anna Henningsen** ([@addaleax](htt"
  },
  {
    "path": "core/src/lib/3rd/libuv/Makefile.am",
    "chars": 21095,
    "preview": "# Copyright (c) 2013, Ben Noordhuis <info@bnoordhuis.nl>\n#\n# Permission to use, copy, modify, and/or distribute this sof"
  },
  {
    "path": "core/src/lib/3rd/libuv/README.md",
    "chars": 9049,
    "preview": "![libuv][libuv_banner]\n\n## Overview\n\nlibuv is a multi-platform support library with a focus on asynchronous I/O. It\nwas "
  },
  {
    "path": "core/src/lib/3rd/libuv/SUPPORTED_PLATFORMS.md",
    "chars": 2716,
    "preview": "# Supported platforms\n\n|  System | Support type | Supported versions | Notes |\n|---|---|---|---|\n| GNU/Linux | Tier 1 | "
  },
  {
    "path": "core/src/lib/3rd/libuv/autogen.sh",
    "chars": 1714,
    "preview": "#!/bin/sh\n\n# Copyright (c) 2013, Ben Noordhuis <info@bnoordhuis.nl>\n#\n# Permission to use, copy, modify, and/or distribu"
  },
  {
    "path": "core/src/lib/3rd/libuv/configure.ac",
    "chars": 4080,
    "preview": "# Copyright (c) 2013, Ben Noordhuis <info@bnoordhuis.nl>\n#\n# Permission to use, copy, modify, and/or distribute this sof"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/Makefile",
    "chars": 6998,
    "preview": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS      =\nSPHINXBUIL"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/cgi/main.c",
    "chars": 2211,
    "preview": "#include <inttypes.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <uv.h>\n\nuv_loop_t *loop;\nuv_pr"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/cgi/tick.c",
    "chars": 208,
    "preview": "#include <stdio.h>\n#include <unistd.h>\n\nint main() {\n    int i;\n    for (i = 0; i < 10; i++) {\n        printf(\"tick\\n\");"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/detach/main.c",
    "chars": 651,
    "preview": "#include <stdio.h>\n\n#include <uv.h>\n\nuv_loop_t *loop;\nuv_process_t child_req;\nuv_process_options_t options;\n\nint main() "
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/dns/main.c",
    "chars": 2174,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <uv.h>\n\nuv_loop_t *loop;\n\nvoid alloc_buffer(uv_handl"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/helloworld/main.c",
    "chars": 266,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <uv.h>\n\nint main() {\n    uv_loop_t *loop = malloc(sizeof(uv_loop_t));\n  "
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/idle-basic/main.c",
    "chars": 430,
    "preview": "#include <stdio.h>\n#include <uv.h>\n\nint64_t counter = 0;\n\nvoid wait_for_a_while(uv_idle_t* handle) {\n    counter++;\n\n   "
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/idle-compute/main.c",
    "chars": 1107,
    "preview": "#include <stdio.h>\n\n#include <uv.h>\n\nuv_loop_t *loop;\nuv_fs_t stdin_watcher;\nuv_idle_t idler;\nchar buffer[1024];\n\nvoid c"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/interfaces/main.c",
    "chars": 911,
    "preview": "#include <stdio.h>\n#include <uv.h>\n\nint main() {\n    char buf[512];\n    uv_interface_address_t *info;\n    int count, i;\n"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/locks/main.c",
    "chars": 1332,
    "preview": "#include <stdio.h>\n#include <uv.h>\n\nuv_barrier_t blocker;\nuv_rwlock_t numlock;\nint shared_num;\n\nvoid reader(void *n)\n{\n "
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/multi-echo-server/hammer.js",
    "chars": 511,
    "preview": "var net = require('net');\n\nvar PHRASE = \"hello world\";\nvar write = function(socket) {\n    socket.write(PHRASE, 'utf8');\n"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/multi-echo-server/main.c",
    "chars": 3299,
    "preview": "#include <inttypes.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <uv.h>\n\nuv_loop_t *loop;\n\nstru"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/multi-echo-server/worker.c",
    "chars": 2330,
    "preview": "#include <assert.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <unistd.h>\n#include <uv.h>\n\nuv_l"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/onchange/main.c",
    "chars": 1231,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n\n#include <uv.h>\n\nuv_loop_t *loop;\nconst char *command;\n\nvoid run_command(uv_fs_e"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/pipe-echo-server/main.c",
    "chars": 2230,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <uv.h>\n\n#ifdef _WIN32\n#define PIPENAME \"\\\\\\\\?\\\\pipe\\"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/plugin/hello.c",
    "chars": 77,
    "preview": "#include \"plugin.h\"\n\nvoid initialize() {\n    mfp_register(\"Hello World!\");\n}\n"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/plugin/main.c",
    "chars": 913,
    "preview": "#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n\n#include <uv.h>\n\n#include \"plugin.h\"\n\ntypedef void (*init_pl"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/plugin/plugin.h",
    "chars": 174,
    "preview": "#ifndef UVBOOK_PLUGIN_SYSTEM\n#define UVBOOK_PLUGIN_SYSTEM\n\n// Plugin authors should use this to register their plugins w"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/proc-streams/main.c",
    "chars": 1150,
    "preview": "#include <stdio.h>\n#include <string.h>\n#include <inttypes.h>\n\n#include <uv.h>\n\nuv_loop_t *loop;\nuv_process_t child_req;\n"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/proc-streams/test.c",
    "chars": 122,
    "preview": "#include <stdio.h>\n\nint main()\n{\n    fprintf(stderr, \"This is stderr\\n\");\n    printf(\"This is stdout\\n\");\n    return 0;\n"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/progress/main.c",
    "chars": 1101,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <unistd.h>\n\n#include <uv.h>\n\nuv_loop_t *loop;\nuv_async_t async;\n\ndouble "
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/queue-cancel/main.c",
    "chars": 1242,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <unistd.h>\n\n#include <uv.h>\n\n#define FIB_UNTIL 25\nuv_loop_t *loop;\nuv_wo"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/queue-work/main.c",
    "chars": 879,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <unistd.h>\n\n#include <uv.h>\n\n#define FIB_UNTIL 25\nuv_loop_t *loop;\n\nlong"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/ref-timer/main.c",
    "chars": 610,
    "preview": "#include <stdio.h>\n\n#include <uv.h>\n\nuv_loop_t *loop;\nuv_timer_t gc_req;\nuv_timer_t fake_job_req;\n\nvoid gc(uv_timer_t *h"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/signal/main.c",
    "chars": 1431,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <unistd.h>\n#include <uv.h>\n\nuv_loop_t* create_loop()\n{\n    uv_loop_t *lo"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/spawn/main.c",
    "chars": 834,
    "preview": "#include <stdio.h>\n#include <inttypes.h>\n\n#include <uv.h>\n\nuv_loop_t *loop;\nuv_process_t child_req;\nuv_process_options_t"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/tcp-echo-server/main.c",
    "chars": 2186,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <uv.h>\n\n#define DEFAULT_PORT 7000\n#define DEFAULT_BA"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/thread-create/main.c",
    "chars": 796,
    "preview": "#include <stdio.h>\n#include <unistd.h>\n\n#include <uv.h>\n\nvoid hare(void *arg) {\n    int tracklen = *((int *) arg);\n    w"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/tty/main.c",
    "chars": 697,
    "preview": "#include <stdio.h>\n#include <string.h>\n#include <unistd.h>\n#include <uv.h>\n\nuv_loop_t *loop;\nuv_tty_t tty;\nint main() {\n"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/tty-gravity/main.c",
    "chars": 1160,
    "preview": "#include <stdio.h>\n#include <string.h>\n#include <unistd.h>\n#include <uv.h>\n\nuv_loop_t *loop;\nuv_tty_t tty;\nuv_timer_t ti"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/udp-dhcp/main.c",
    "chars": 3462,
    "preview": "#include <assert.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include <uv.h>\n\nuv_loop_t *loop;\nuv_udp"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/uvcat/main.c",
    "chars": 1663,
    "preview": "#include <assert.h>\n#include <stdio.h>\n#include <fcntl.h>\n#include <unistd.h>\n#include <uv.h>\n\nvoid on_read(uv_fs_t *req"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/uvstop/main.c",
    "chars": 607,
    "preview": "#include <stdio.h>\n#include <uv.h>\n\nint64_t counter = 0;\n\nvoid idle_cb(uv_idle_t *handle) {\n    printf(\"Idle callback\\n\""
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/uvtee/main.c",
    "chars": 2162,
    "preview": "#include <stdio.h>\n#include <fcntl.h>\n#include <unistd.h>\n#include <string.h>\n#include <stdlib.h>\n\n#include <uv.h>\n\ntype"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/code/uvwget/main.c",
    "chars": 4604,
    "preview": "#include <assert.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <uv.h>\n#include <curl/curl.h>\n\nuv_loop_t *loop;\nCURL"
  },
  {
    "path": "core/src/lib/3rd/libuv/docs/make.bat",
    "chars": 6485,
    "preview": "@ECHO OFF\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-build\n)\nset BUI"
  }
]

// ... and 6825 more files (download for full content)

About this extraction

This page contains the full source code of the surparallel/luacluster GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 7025 files (78.9 MB), approximately 16.9M tokens, and a symbol index with 36796 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!